nextKeyView标签到工具栏中的NSBrowser和搜索视图

时间:2016-02-16 05:55:01

标签: macos cocoa nsview nsresponder

我在Mac OS X应用程序中要求用户能够在单个窗口中的关注项之间进行选项卡,

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

当用户仅在文本框和列表之间进行选项卡时。出于某种原因,NSBrowser似乎不算作列表,并且工具栏中的NSSerachField似乎不算作文本框。但如果我移动标签,我可以在NSSerachField中向后标签

如果我在所有控件之间将控件设置之间的选项卡更改为选项卡,则NSBrowser会被选中,因此NSSearchField也是如此,但是我有一个单独的问题,你不能跳出NSSearchField。我假设这意味着我的nextKeyView链是正常的,或者只有在启用所有控件之间的选项卡时才完全忽略nextKeyView值。

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

我是否可以通过某种方式让Mac OS将NSBrowser视为列表,我已经将NSBrowser子类化了。如果文本框无法在工具栏中显示,那么是否有原因。

另外一个问题是,NSBrowser和第一个NSCollectionView在NSTabView中,第二个NSCollectionView也在NSTabView中,NSTabViews已经动态地添加和删除了NSTabeViewItems,因此内容类似于文档。 我将NSTabViews设置为nextKeyView,然后在将它们添加到NSTabView后立即为NSTabViewItem设置initialFirstResponder。我还为NSBrowser设置了nextKeyView设置到NSCollectionView。并且windows initialFirstResponder被设置为第一个NSTabView。

其他信息 我有autorecalculatesKeyViewLoop到NO。我已经设法让它暂时工作,通过代码设置下一个响应者,但随后似乎发生了一些事情,Cocoa继续改变它。

1 个答案:

答案 0 :(得分:0)

我找到的唯一解决方案是继承NSWindow并覆盖selectKeyViewPrecedingView:和selectKeyViewFollowingView:,我们将NSTabViewItems动态添加到NSTabView这个奇怪的动态,我想这可能会打破默认功能。

此解决方案无法解决从NSSearchField跳出的问题,这可能是因为用户可以触发搜索操作,因此NSSearchField中的Tab键不会落入窗口,我很可能最终继承NSSearchField。

这些解决方案有点黑客我宁愿选择苹果默认功能,但这不是一个选项。