PXListView拖放不起作用

时间:2013-02-02 08:27:51

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

我创建了用于管理PXListView的NSViewController ....委托与文件所有者连接......

这里的一切都按照期望工作。除了拖放......

拖动它时没有进入拖动委托功能...并且在拖动时没有显示+符号(即拖动符号)...并且拖动单元格重定位到其原始位置

#import "PXListView.h"

@interface ListViewController : NSViewController <PXListViewDelegate>
{
    IBOutlet  PXListView *listView;
    NSMutableArray *_listItems;

    int count;

}
- (void)addCell;

@end



- (BOOL)listView:(PXListView*)aListView writeCellsWithIndexes:(NSIndexSet*)rowIndexes toPasteboard:(NSPasteboard*)dragPasteboard
{
    // +++ Actually drag the items, not just dummy data.
    [dragPasteboard declareTypes: [NSArray arrayWithObjects: NSStringPboardType, nil] owner: self];
    [dragPasteboard setString: @"Just Testing" forType: NSStringPboardType];

    return YES;
}

- (NSDragOperation)listView:(PXListView*)aListView validateDrop:(id <NSDraggingInfo>)info proposedCell:(NSUInteger)row
      proposedDropHighlight:(PXListViewDropHighlight)dropHighlight;
{
    return NSDragOperationCopy;
}

- (BOOL)listView:(PXListView*)aListView acceptDrop:(id <NSDraggingInfo>)info row:   (NSUInteger)row dropHighlight:(PXListViewDropHighlight)dropHighlight
{
    NSLog(@"Accept Drop");

    ListViewThumbnailObject *temp = [_listItems objectAtIndex: [listView selectedCell]];
    [_listItems removeObjectAtIndex: [listView selectedCell]];
    [_listItems insertObject: temp atIndex: row];
    [listView reloadData];
    return YES;
}

它没有进入拖动相关的委托方法..

“nib”文件中的

委托与文件所有者联系......

任何人都可以建议我如何解决这个问题?

谢谢, MUTHU

1 个答案:

答案 0 :(得分:0)

为了能够接受丢弃,您可能需要确保为您计划接受的所有拖动类型注册列表视图。尝试在列表视图控制器类的awakeFromNib方法中添加它:

- (void)awakeFromNib {
    [listView registerForDraggedTypes:[NSArray
               arrayWithObjects:NSStringPboardType, nil]];
}

有关详细信息,请参阅Drag and Drop Programming Topics: Receiving Drag Operations

请注意,我在这里使用了NSStringPboardType,因为这是您在listView:writeCellsWithIndexes:toPasteboard:方法中声明的类型。您使用的确切类型数组取决于您要支持的类型以及您要支持的拖动操作的类型(例如,您是否只想实施拖放以允许在单个列表视图中重新排序项目,或者您是否允许从Finder,Finder或您自己的应用程序中的不同视图之间拖动项目。如果您描述了希望支持的拖动操作类型,我可以提供有关如何实现它们的更多详细信息。