2012-03-09 67 views
0

我運行一個模式窗口(我都試過beginModalSessionForWindow和runModalForWindow),之後在NSTableView的一個拖放:可可:拖放創建問題,一個模式窗口

(BOOL)tableView:(NSTableView*)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation 
{ 
    //launch modal window 
} 

然而,模式窗口的NSTextField似乎不可用(它「鎖定」,我無法輸入它),直到看到文件圖標的(mac OSX)動畫移回文件。然後它工作。

我希望它很清楚,似乎模式窗口正在中斷拖放版本。

感謝

回答

1

這裏的問題是,-tableView:acceptDrop:row:dropOperation:需要返回運行循環的代禱模態窗口前。不幸的是,不管用哪種方法來建立模態,它都會改變運行循環,直到模態消失,這意味着系統會認爲你仍然沒有解決掉。最終,它會超時,下降會回彈(這就是你所看到的)。

解決此問題的一種方法是發送自己一條消息,以便很快放置窗口,但不在此運行循環中(使用-performSelector:withObject:afterDelay:)。由於您已經在主線程中,因此您將在主線程中使用定時器之後請求延遲後安排回調,以便您做出響應。