【问题标题】:Drag-drop from NSTableView to NSImageView从 NSTableView 拖放到 NSImageView
【发布时间】:2009-06-29 08:07:34
【问题描述】:

我需要从包含图像路径的 NSTableView 中拖出一行并将其放在 NSImageView 上,并且被拖行的图像应该出现在 imageview 中。帮助表示赞赏

【问题讨论】:

    标签: objective-c cocoa drag-and-drop


    【解决方案1】:

    非常感谢。它真的奏效了。我为 NSStringPboardType 和 NSFilenamesPboardType 注册了 NSImageView 和 NSTableView。然后在 TableView 委托中我使用了 以下代码。

    - (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
    {
        NSString *string = [filePath objectAtIndex:[rowIndexes firstIndex]];
        [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
        [pboard setString:string forType:NSStringPboardType];
        return YES;
    }
    

    并且在 NSImageView NSDragging Destination 非正式协议中,使用了如下代码。

    - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
    {
        NSString *str = [[sender draggingPasteboard] stringForType:NSStringPboardType];
        myImage = [[NSImage alloc] initWithContentsOfFile:str];
        [self setImage:myImage];
        [self setNeedsDisplay: YES];
        return NSDragOperationCopy;
    }
    

    干杯:)

    【讨论】:

    • 您只需要为拖动类型注册接收视图(图像视图),而不是发送视图(表格视图)。除非您也希望允许拖放到 table view 上——但这需要更多的数据源方法。
    • 另外,不要忘记释放你分配的内容。请参阅 Cocoa 的内存管理编程指南:developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt
    • 是的。你说的对。我会实施的。再次非常感谢。 :)
    【解决方案2】:

    首先,在您的table data source 中,实现表格行拖动的必要方法。您将以一种或多种数据类型将表示该行的数据放到拖动粘贴板上。您将为此使用的一种类型是NSFilenamesPboardType,它采用路径名数组。

    然后,创建一个可以处理 NSFilenamesPboardType 的 NSImageView 子类。 (您需要实现来自the NSDraggingDestination informal protocol 的方法。)然后让您的图像视图成为这个子类的实例,而不是NSImageView,并让register 成为NSFilenamesPboardType 的那个视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2011-06-27
      • 2012-05-05
      • 2011-10-04
      • 2010-10-23
      • 2010-10-13
      • 2013-09-17
      相关资源
      最近更新 更多