使用键盘控制 NSSegmentedControl



我的Cocoa应用程序中有一个表单,其中包含一个NSSegmentedControl,我希望可以通过键盘进行控制。然而,NSSegmentedControl似乎非常不愿意成为第一响应者。

将窗口的初始第一个响应者设置为分段控件不执行任何操作 - 首次加载窗口时,它不会具有键盘焦点。但是,如果我像这样手动设置第一个响应者,它确实会获得焦点:

[segmentedControl.window makeFirstResponder: segmentedControl];

如果窗体的唯一部分是分段控件,这将正常工作。如果我添加另一个字段(例如,NSTextField),并将分段控件的下一个响应者设置为该字段,则分段控件将永远不会成为第一个响应者。焦点将立即转到文本字段,按 Tab 切换回分段控件不起作用。

我尝试过子类化NSSegmentedControl并覆盖接受FirstResponder,成为FirstResponder等,但无济于事。唯一有区别的是 resignFirstResponder - 如果我从该方法返回 NO,那么分段控件确实会保留焦点,但显然我不希望它一直保持焦点。

关于如何让控件像普通响应者一样运行的任何想法?

它的行为符合预期。并非所有控件都参与"键视图循环"。全键盘导航通过"系统偏好设置"中的"通用辅助"为所有 App 打开,而不是由单个 App 自行实现。

最好不要在用于繁重键盘输入的窗体中使用分段控件。NSPopUpButton 更接近我们在 Web 表单中执行的内容,因此它不一定是应用程序 UI 中的错误选择。

与其确切地回答你提出的问题(其他人可以做),我谦虚地建议你选择功能方面,但代价是稍微漂亮的UI元素,因为那个更漂亮的UI元素并不是为了与键盘相处。

相关内容

  • 没有找到相关文章

最新更新