我在Mac OS X应用中要求用户能够在单个窗口中的跟随项之间切换,


工具栏中的NSSearchField
NSBrowser
NSCollectionView
NSCollectionView(第二个)
NSComboBox


当用户仅在文本框和列表之间切换时。由于某种原因,NSBrowser似乎不算作一个列表,而工具栏中的NSSerachField也不算作一个文本框。但是,如果我移动制表符,则可以在NSSerachField中向后制表符

如果我将控件设置之间的选项卡更改为所有控件之间的选项卡,则将NSBrowser的选项卡更改为选项卡,NSSearchField的选项卡也更改为选项卡,尽管如此,我还有一个单独的问题,即您无法选项卡超出NSSearchField。我假设这意味着我的nextKeyView链是可以的,或者当启用所有控件之间的制表符时,nextKeyView值是否被完全忽略。

我在界面构建器中设置了nextKeyViews。

有什么办法可以使Mac OS将NSBrowser视为列表,我已经在继承NSBrowser了。这是有原因的,如果文本框在工具栏中,则无法将其选中。

另外一个麻烦是,NSBrowser和第一个NSCollectionView都在NSTabView内,第二个NSCollectionView也在NSTabView内,NSTabViews动态添加和删除了NSTabeViewItems,因此内容有点像文档。
我将NSTabViews设置为nextKeyView,然后在将它们添加到NSTabView时立即为NSTabViewItems设置initialFirstResponder。我还为NSBrowser设置了nextKeyView,以使用Tab键切换到NSCollectionView。 Windows InitialFirstResponder设置为第一个NSTabView。

附加信息
我将autorecalculatesKeyViewLoop设置为NO。通过设置下一个响应程序的代码,我设法使其暂时工作,但是随后似乎发生了某些事情,可可去了并对其进行了全部更改。

最佳答案

我发现的唯一解决方案是将NSWindow子类化,并覆盖selectKeyViewPrecedingView:和selectKeyViewFollowingView :,我们将NSTabViewItems动态添加到NSTabView中很奇怪,我认为这可能会破坏默认功能。

此解决方案无法解决在NSSearchField之外进行制表的问题,这也许是为了让用户可以触发搜索操作,因此在NSSearchField中进行制表操作不会进入窗口,我可能最终将NSSearchField子类化。

这些解决方案有点黑客,我宁愿使用Apple的默认功能,但这也不是一个选择。

关于macos - 将nextKeyView切换到NSBrowser并在工具栏中搜索 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35424824/

10-12 14:49