在Cocoa应用程序中设置自定义选项卡顺序

问题描述:

我有一个包含两列字段的窗口。左边是NSTableViewNSTokenField,右边有两个NSTextField。我希望Tab键顺序向左,然后向右。 (因此,在我的窗口中订单应该是NSTableViewNSTokenFieldNSTextFieldNSTextField)。但是,Cocoa似乎决定了自己的首选订单,从顶部到底部。 NSTokenField位于窗口中的任何其他控件的下方,所以它始终从NSTableView选项卡右移NSTextField s,然后返回到左下角的NSTokenField在Cocoa应用程序中设置自定义选项卡顺序

我试过在苹果开发者文档Enable Tabbing Between Text Fields的这一部分中,并在Interface Builder中按照我想要的顺序拖动字段之间的nextKeyView。这似乎对Tab键顺序绝对没有影响,并且从我所知道的情况来看,Cocoa似乎仍然使用其默认检测方法来选择Tab键顺序。

任何想法?我的目标是10.6+。

确保您还将窗口的initialFirstResponder出口设置为第一个字段(本例中为表格视图)。

+0

谢谢......这是问题所在。尽管如此,我确实感觉有点无聊。 :) – 2011-05-19 15:50:42

听起来像是你将不得不这样做编程:
注册controlTextDidEndEditing通知,按标签标识字段,然后调用makeFirstResponder:fieldOfYourChoice的窗口。和/或在现场使用IBAction,通过sender进行标识,并致电makeFirstResponder

+0

为什么我必须以编程方式执行它?如果用户想要移动+标签怎么办?对于它的价值,我确实尝试过,但没有奏效。一个问题是NSTableView在你离开它时不会发送一个controlTextDidEndEditing通知给它的委托。即使在NSTokenField和NSTextFields(它们会触发通知),makeFirstResponder消息似乎也不会更改Tab键顺序。最后,我不确定在字段上使用IBAction会对我有用,因为我认为当按下Enter键时会触发IBAction,并且我不想在按下输入时更改字段。 – 2011-05-17 15:16:35

+0

如果没有其他的工作,你可以尝试捕获关键事件。你所有的控件都是NSResponder的子类,所以如果你继承它们,你可以自定义NSResponder的keyUp方法。测试该事件是标签还是换档标签。如果没有,什么都不要做。如果是这样,从窗口中找出哪个控件具有firstResponder状态,以便知道你在哪里,然后从那里开始。 (为了达到这个目的,你必须能够使用makeFirstResponder,它对我来说既可以用于按钮也可以用于文本框,也许可以尝试添加一个0.1延迟?)另外,你可能需要删除IB中冲突的nextKeyViews。 – Wienke 2011-05-18 17:29:07