在NSTableView中拖放后,我正在运行一个模态窗口(我尝试过beginModalSessionForWindow和runModalForWindow):
(BOOL)tableView:(NSTableView*)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation
{
//launch modal window
}
然而,模态窗口的NSTextField似乎不可用(它被“锁定”,我无法输入),直到我看到文件图标的(mac OSX)动画移回文件。然后就行了。
我希望很清楚,似乎模态窗口正在中断拖放释放。
由于
答案 0 :(得分:1)
这里的问题是-tableView:acceptDrop:row:dropOperation:
需要在Run Loop为模态窗口进行调试之前返回。不幸的是,无论你使用哪种方法来建立模态,它都会改变运行循环直到模态消失,这意味着系统会认为你仍然没有解决掉落。最终,它会超时,掉落会回来(这就是你所看到的)。
解决此问题的一种方法是在不久之后向自己发送一条消息来放置窗口,但不是在此运行循环中(使用-performSelector:withObject:afterDelay:
)。由于您已经在主线程中,因此将使用主线程上的计时器在您请求的延迟之后安排回调,以便您做出响应。