4

私が完全に混乱していない限り、NSPanel のフィールドrunModalForWindow:のプロパティを無視しているようです。nextKeyView

#define RUN_MODAL 1
#if RUN_MODAL
    [ NSApp runModalForWindow: self.view.window ] ;
#else
    [ self.view.window makeKeyAndOrderFront: nil ] ;
#endif

私はそれを両方の方法で試しましたが、通常を使用すると間違いなく正しいタブ順序が得られ、使用するmakeKeyAndOrderFront:とそうではありませんrunModalForWindow:
何か不足していますか?または、モーダルを実行しているときにそれを機能させる方法を誰かが知っていますか?

提案に従って、次のことを試しましたが、同じ結果が得られました。

#define RUN_MODAL 1
#if RUN_MODAL
#define USE_BEGINSHEET 1
#if USE_BEGINSHEET
    [ NSApp beginSheet: self.view.window
        modalForWindow: nil
         modalDelegate: nil
        didEndSelector: NULL
           contextInfo: NULL ];
#else
    [ NSApp runModalForWindow: self.view.window ] ;
#endif
#else
    [ self.view.window makeKeyAndOrderFront: nil ] ;
#endif

「ドキュメント ウィンドウ」はnil、これがほとんどバックグラウンドの UI のないアプリであり、ログイン ダイアログがポップアップすることがあることに注意してください。

4

1 に答える 1

2

Interface Builder の Attributes Inspector の Window セクションにある Auto Recalculates View Loop チェックボックスでした。デフォルトではオンになっていますが、モーダル ダイアログでいずれかのフィールドが動的に有効化/無効化されている場合 (バインディングなどによって)、再計算は「幾何学的」(左から右、上から下) の順序にパントします。

autorecalculatesKeyViewLoopプログラム的には、NSWindow (私の場合は NSPanel) のプロパティに対応していると思います。

于 2013-06-05T21:17:49.747 に答える