macos - nextKeyView 切换到 NSBrowser 并在工具栏中搜索 View

标签 macos cocoa nsview nsresponder

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

  • 工具栏中的 NSSearchField
  • NS浏览器
  • NSCollectionView
  • NSCollectionView(第二个)
  • NSComboBox

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

如果我将控件设置之间的选项卡更改为 NSBrowser 所选项卡到的所有控件之间的选项卡,并且 NSSearchField 也是如此,但我有一个单独的问题,即您无法从 NSSearchField 中选项卡。我假设这意味着我的 nextKeyView 链正常,或者当启用所有控件之间的选项卡时, nextKeyView 值完全被忽略。

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

有什么方法可以让 Mac OS 将 NSBrowser 视为列表,我已经对 NSBrowser 进行了子类化。如果文本框位于工具栏中,是否有原因无法使用 Tab 键进入?

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

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

最佳答案

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

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

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

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

相关文章:

java - Swing MacBook 无效显示模式

macos - Cocoa 中的容器 View ,在运行时交换内容并保留大小

bash - 在 OSX 10.12/Sierra 中使用终端安装网络驱动器

Swift - 数组到 macOS 中的 TableView

macos - OS X上gprof的问题: [program] is not of the host architecture

cocoa - NSView 高级概述?

cocoa - 鼠标事件通过 NSView 渗透

Objective-C:获取文件类型支持的文件扩展名

iphone - 线程正在退出我的应用程序

objective-c - NS_DESIGNATED_INITIALIZER 预期为 : (colon)