4

除非我完全感到困惑,否则似乎runModalForWindow:忽略nextKeyView了 NSPanel 中字段的属性。

#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 复选框。它默认为选中,但在模式对话框中,如果任何字段被动态启用/禁用(例如,通过绑定),则重新计算平底船到“几何”(从左到右,从上到下)顺序。

我相信以编程方式对应于autorecalculatesKeyViewLoopNSWindow 的属性(在我的情况下是 NSPanel)。

于 2013-06-05T21:17:49.747 回答