在我的拖动操作的接收器的performDragOperation(sender: NSDraggingInfo)
方法中,我想显示需要用户输入的模态窗口。删除的文件的URL将填充模态窗口中的一个字段,用户必须填充另一个NSTextField。
问题是模式窗口在拖动操作期间不响应键盘事件,这有效地导致死锁,直到拖动超时。我找不到一个可靠的方法来解决这个问题。我有两种可能的解决方法,但都没有解决这个问题:
dispatch_after()
告诉主线程在拖动操作完成后0.25秒显示模态窗口。这有效,但取决于竞争条件。beginModalSession()
。在这种情况下,比模态窗口更不可取。代码:
override func performDragOperation(sender: NSDraggingInfo) -> Bool {
// Do some stuff here to get data from the sender
// Load a view controller and display it modally
let vc = MyViewController(nibName: "MyViewController", bundle: nil) {
self.presentViewControllerAsModalWindow(vc)
}
return true
}
我尝试使用dispatch_async(dispatch_get_main_queue()) {}
来呈现视图控制器。我认为这会允许performDragOperation
返回true,但这似乎不足以完全结束拖动操作。
我也试过从concludeDragOperation()
显示视图控制器,但这也无济于事。
处理这种情况的最佳做法是什么?