2012-03-09 6 views
0

は、モーダルウィンドウに問題を作成してドロップ(私が試したの両方beginModalSessionForWindowとrunModalForWindow)、NSTableViewのドラッグドロップ後:ココア:ドラッグと私はモーダルウィンドウを実行している

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

しかし、ファイルアイコンの(mac OSX)アニメーションがファイルに戻ってくるまで、モーダルウィンドウのNSTextFieldは利用できないようです(「ロック」されていますが、入力できません)。その後、それは動作します。

モーダルウィンドウがドラッグドロップのリリースを中断しているようです。ここ

おかげ

答えて

1

問題は-tableView:acceptDrop:row:dropOperation:が実行ループがモーダルウィンドウのためにとりなしの前に返す必要があるということです。残念ながら、どの方法を使用してモーダルを設定しても、モーダルがなくなるまで実行ループが変更されます。これは、システムがまだドロップを解決していないと思うことを意味します。最終的にはタイムアウトになり、ドロップは元に戻ります(これはあなたが見ているものです)。

これを解決する1つの方法は、この実行ループ(-performSelector:withObject:afterDelay:を使用)ではなく、すぐ後でウィンドウを表示するメッセージを自分自身に送信することです。既にメインスレッドに入っているので、メインスレッドのタイマーを使用して要求された遅延後にコールバックをスケジュールし、応答することができます。

関連する問題