0

我已经创建了用于管理 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”文件中,委托与文件所有者连接......

谁能建议我如何解决这个问题?

谢谢,穆图

4

1 回答 1

0

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

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

有关详细信息,请参阅拖放编程主题:接收拖动操作

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

于 2013-02-02T08:45:54.480 回答