OSX Cocoa 使用选项卡在视图中的子控件之间导航不起作用

OSX Cocoa using tab to navigate between child controls within a view not working

我是 Xcode/OSX UI 的新手,所以我可能忽略了一些愚蠢的事情。这是 XCode 5.11 目标 OSX 10.10 桌面。

我继承了一些带有几个视图的代码,其中无法使用 Tab 键在视图中的子控件之间导航。

在研究这一点时,几乎所有内容都说要确保设置第一响应者,然后使用 nextKeyView 链接您的控件。

我按照此视频中的步骤进行操作 https://www.youtube.com/watch?v=SRrE8eqp0dU(XCode 4,但所有功能似乎与 5.11 相同)无济于事。

我还查看了这个解决方案 How to make child controls of view will get focus on Tab and Shift+Tab in NSViewController,这听起来与我所看到的类似,但我继承的 类 之一使用 NSWindowController vs . NSViewController 作为基础,没有要覆盖的 loadView,而另一个派生自 NSViewController 的行为与对 loadView 所做的更改没有任何不同。

当我的 window 启动我的第一响应器控件(在本例中为 NSTextField)时,它具有焦点(蓝色突出显示)但 Tab 键被忽略并且焦点不会改变,除非我使用鼠标。

所以最初这真的不是标签顺序问题,它似乎是标签被忽略的问题,谁知道顺序是什么。我尝试使用鼠标将焦点设置到 NSButtonCell 和 NSPopUpButton,然后从这些按钮导航以查看我的 NSTextField 是否存在问题,但它们表现出相同的行为。 None 控件设置为 "Refuses First Responder",这是建议检查的另一个设置。

我不知所措,正在寻找任何其他东西来尝试或检查。

我遇到问题的第一个视图是:Window/子视图/多个子框/每个框有多个控件,以防出现问题或使事情复杂化。它主要用于设置应用程序首选项。

第二个视图似乎更复杂,因为有一个 Window 以 next/back 进程(向导界面)换出其子视图。最初的 window 笔尖是 "blank" 所以我没有看到如何像我对首选项 window 所做的那样将来自 IB 的第一响应者关联起来,因为所有控件都在它们自己的单独视图笔尖上(这些都显示为 "Custom View",而首选项仅显示 "View")。

我的解决方案是确保为 windows 托管这些视图启用属性检查器中的 "Auto Recalculates View Loop" 设置。这个对应NSWindow的autorecalculatesKeyViewLoop属性