Cra*_*tis 5 cocoa drag-and-drop objective-c nstableview
我有一个NSTableView包含许多项目.我想实现从拖内和删除外的NSTableView的进行删除拖曳的项目.(有点像Safari的'poofs'书签.)
在NSTableView已经配置为支持拖放N"降重新排序,并接受来自另一滴NSTableView在应用程序中,因此,虽然大部分是有线了,我只是缺少一小块功能.
更新:
感谢肖恩到目前为止的帮助.虽然我可以收到一个项目在它已经浮动回到其原始位置后被拖出的通知(请参阅对他的回答的评论),但我希望在释放鼠标按钮后立即收到通知.
当前行为是用户将项目拖放出来,将拖动视为"无效",并使项目动画回原始位置.然后收到通知,我可以删除该项目,但从UI的角度来看,这对于用户来说有点混乱.
Sea*_*ean 10
听起来您的表视图已经在实现NSDraggingSource协议.在这种情况下,您可以添加方法draggedImage:endedAt:operation:(OS 10.7之前的版本)或draggingSession:endedAtPoint:operation:(OS 10.7),如果拖动失败,它将NSDragOperationNone在operation参数中提供操作.因此,您可以检查是否已通过此操作,然后删除该对象并将其从视图中删除(如果是).
换句话说,它看起来像这样(在10.7中):
-(void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation {
if (operation == NSDragOperationNone) {
//delete object, remove from view, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
为避免拖动图像在删除之前浮回到其原始位置,可以在tableView:draggingSession:willBeginAtPoint:forRowIndexes:方法中设置拖动会话属性“ animatesToStartingPositionsOnCancelOrFail”:
- (void)tableView:(NSTableView *)tableView draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint forRowIndexes:(NSIndexSet *)rowIndexes {
[session setAnimatesToStartingPositionsOnCancelOrFail:NO];
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍在寻找删除拖动行时创建“欺骗”的方法。
| 归档时间: |
|
| 查看次数: |
2435 次 |
| 最近记录: |