0 cocoa drag-and-drop nsoutlineview
我最近开了一个没有帐户的线程,所以我在这里用帐户重新发布这个问题,这样我就可以编辑当前的程序链接,以便其他用户可以关注这个.我还更新了下面的代码.这是我原来的问题:
我在Outlineviews和DND上阅读了另一篇文章,但我无法让我的程序工作.在这篇文章的底部是一个链接到我的项目的拉链.它非常基本,只有一个outlineview和按钮.我希望它接收被删除的文本文件,但我的代码或连接有问题.我试着遵循他们的NSOutline Drag and Drop的Apple示例代码,但我遗漏了一些东西.1区别是我的程序是基于文档的程序而他们的例子不是.我将文件所有者设置为接收委托操作,因为这是我处理拖放操作的代码,以及按钮操作.它可能是一个简单的错误,所以有人可以看看它并告诉我我做错了什么?以下是该文件的链接:http://dl.dropbox.com/u/7195844/OutlineDragDrop1.zip
您没有回复NSOutlineView的拖动验证消息.
您的原始代码已实施tableView:validateDrop:proposedRow:proposedChildIndex:.正如我在这个问题上指出的那样,当你的表视图是一个大纲视图时,这是错误的; NSOutlineView不会发送表视图拖动验证消息,只会发送大纲视图拖动验证消息.
你已经改变了你的拖动验证方法,就像这样声明:
Run Code Online (Sandbox Code Playgroud)- (NSDragOperation)outlineView:(NSOutlineView*)view validateDrop:(id <NSDraggingInfo>)info proposedRow:(int)row proposedChildIndex:(NSInteger)index
但实际上并没有发出这样的信息.
请记住,NSOutlineView很少处理行索引,因为这些行可以在父行展开和折叠时更改.它代替"items",通常是模型对象.
因此,正确的验证方法是:
Run Code Online (Sandbox Code Playgroud)- (NSDragOperation)outlineView:(NSOutlineView*)view validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index
请注意选择器的第三个组件的名称,以及与其一起使用的参数的类型和名称.
应用此更改后,您的数据源将验证丢弃.