使用键盘控制NSSegmentedControl

时间:2012-05-28 01:09:32

标签: objective-c cocoa nsresponder nssegmentedcontrol

我的Cocoa应用程序中有一个表单,其中包含一个我想通过键盘控制的NSSegmentedControl。然而,看起来NSSegmentedControl非常不愿意成为第一个响应者。

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

[segmentedControl.window makeFirstResponder: segmentedControl];

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

我已经尝试了继承NSSegmentedControl并重写acceptFirstResponder,becomeFirstResponder等等无济于事。唯一有区别的是resignFirstResponder - 如果我从该方法返回NO,那么分段控件确实会保留焦点,但显然我不希望它始终保持焦点。

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

1 个答案:

答案 0 :(得分:0)

它的行为符合预期。并非所有控件都参与“关键视图循环”。通过“系统偏好设置”中的“通用访问”为所有应用启用了全键盘导航功能,并且单个应用无需单独实施。

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

我没有完全回答你问的问题(其他人可以做的事情),我谦虚地建议你选择功能方面的代价是稍微漂亮的UI元素,因为那个更漂亮的UI元素并不打算相处用键盘。