1

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

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

[segmentedControl.window makeFirstResponder: segmentedControl];

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

我试过继承 NSSegmentedControl 并覆盖 AcceptFirstResponder、becomeFirstResponder 等,但无济于事。唯一有区别的是resignFirstResponder——如果我从那个方法返回NO,那么分段控件确实会保持焦点,但显然我不希望它一直保持焦点。

关于如何让控件表现得像普通响应者的任何想法?

4

1 回答 1

0

它的行为符合预期。并非所有控件都参与“关键视图循环”。通过系统偏好设置中的通用访问为所有应用程序打开全键盘导航,而不是单个应用程序自行实现。

最好不要在用于繁重键盘输入的表单中使用分段控件。NSPopUpButton 与我们在 Web 表单中所期望的更接近,因此它并不一定是您应用程序 UI 中的错误选择。

与其准确回答您提出的问题(其他人可以这样做),我谦虚地建议您以稍微漂亮的 UI 元素为代价选择功能方面,因为更漂亮的 UI 元素并非旨在与键盘相处.

于 2012-05-28T02:29:30.687 回答