1

我在 Mac OS X 应用程序中要求用户能够在单个窗口中的后续项目之间切换,

  • 工具栏中的 NSSearchField
  • NS浏览器
  • NSCollectionView
  • NSCollectionView(第二个)
  • NSC组合框

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

如果我将控件设置之间的选项卡更改为所有控件之间的选项卡,则 NSBrowser 和 NSSearchField 都是选项卡,但是我有一个单独的问题,您无法从 NSSearchField 中跳出。我假设这意味着我的 nextKeyView 链是好的,或者当启用所有控件之间的选项卡时,nextKeyView 值完全被忽略。

我在界面生成器中设置了 nextKeyViews。

有什么方法可以让 Mac OS 将 NSBrowser 视为一个列表,我已经在继承 NSBrowser。如果它在工具栏中,是否有一个文本框不能被选项卡进入的原因。

另一个问题是 NSBrowser 和第一个 NSCollectionView 在 NSTabView 中,第二个 NSCollectionView 也在 NSTabView 中,NSTabViews 动态添加和删除了 NSTabViewItems,所以内容有点像文档。我将 NSTabViews 设置为 nextKeyView,然后在将 NSTabViewItems 添加到 NSTabView 后立即为其设置 initialFirstResponder。我还为 NSBrowser 设置了 nextKeyView 选项卡到 NSCollectionView。并且windows的initialFirstResponder设置为第一个NSTabView。

附加信息我已自动重新计算 KeyViewLoop 为否。通过在代码中设置下一个响应者,我已经设法让它暂时工作,但随后似乎发生了一些事情,Cocoa 去改变了这一切。

4

1 回答 1

1

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

该解决方案不能解决从 NSSearchField 中跳出的问题,这可能是因为用户可以触发搜索操作,因此 NSSearchField 中的跳格不会落入窗口,我很可能最终将 NSSearchField 子类化。

这些解决方案有点骇人听闻,我宁愿只使用 Apple 的默认功能,但这不是一个选择。

于 2016-02-17T05:41:10.810 回答