Dmi*_*rov 2 macos cocoa interface-builder nstextfield nsviewcontroller
我有一个具有以下布局的NSViewController,使用故事板设置:

每个NSTextField的nextKeyView出口按照屏幕截图中显示的顺序配置为下一个NSTextField.例如,我在IB中选择了服务器NSTextField,并从Connectivity检查器中的nextKeyView插座拖动到登录NSTextField,并对其余字段执行相同的操作.
启动应用程序后,任何字段上的任何选项卡按下都会将选择移动到第一个NSTextField.如何在字段之间实现所需的标签?
我在各自的WindowController中试过这个,但无济于事:
- (void)windowDidLoad {
[super windowDidLoad];
self.window.initialFirstResponder = self.serverTextField;
}
Run Code Online (Sandbox Code Playgroud)
这似乎是最详细的答案,从Justin Bur发布到cocoa-dev邮件列表(2007年1月31日).
多年来,人们多次询问为什么他们的关键视图循环不能正常工作.大多数这些查询从未在列表中得到解答.无法在此列表或网站上找到关键视图循环问题的帮助后,我做了一些实验.
关键视图循环可能有问题需要处理.它的设计只是神奇地工作,所以在大多数情况下它不是问题.但如果它不起作用,很难弄清楚为什么不行.以下是获取工作密钥视图循环的一些准则.
考虑是否可以满足自动生成的关键视图循环.每个响应者的左上角确定其在循环中的位置.循环从左上角到右下角逐行进行(至少对于从左到右的脚本).这是迄今为止最简单的解决方案.为了实现这一目标,确保窗口
initialFirstResponder是零.另见-[NSWindow recalculateKeyViewLoop].如果自动键视图循环不合适,请尽可能使用Interface Builder设置自己的键视图循环.必须设置窗口的
initialFirstResponder出口,以禁用自动密钥循环生成.从循环周围的响应者,设置循环中每个项目的出口.(如果需要的话,最后一个项目的可以被设置为第一项,从而使环路闭合.)对于滚动条的任何视图(,等)时,应使用的包围设置时.nextKeyViewnextKeyViewNSTextViewNSTableViewNSScrollViewnextKeyView如果您在代码中创建了任何响应者,请尽早将它们拼接到关键视图循环中(最好是在
awakeFromNib或可能-[NSWindowController windowDidLoad]).对于新项目的每个(序列),您必须使用调用-[NSView setNextKeyView:]:一次使前一项指向(第一个)新项,(调用使每个新项指向下一项),最后使(最后)新项目指向其继任者.如果您的窗口有工具栏,则有兴趣成为关键视图的工具栏项将在显示或隐藏工具栏时自动添加和删除.工具栏没有考虑到的返回值
-[NSWindow autorecalculatesKeyViewLoop].工具栏项始终放在最左上方项之前的循环中.没有简单的方法来改变这一点.一旦显示窗口,修改关键视图循环可能非常困难 - 特别是如果您正在使用
NSScrollView或NSTabView.这些(以及其他?)是特殊情况,因为它们会自动将包含的视图插入到循环中.有关an的initialFirstResponder和key视图循环的信息NSTabViewItem,请参阅OS X 10.1的AppKit发行说明.如果你有些项目有时应该在循环中而其他时候没有,那么不建议尝试将它们拼接进出循环.相反,
-[NSResponder acceptsFirstResponder]这些项的子类.如果一个项目从这个方法返回NO,它将被遗漏(暂时); 如果它返回YES,它将返回循环.或者,如果项目是从NSControl(它可能是)派生的,您可以调用setRefusesFirstResponder:它.如果您犯了错误,您的关键视图循环将停止在一个方向或两个方向上运行.一旦它破裂它就会破碎.要调试,注释掉
setNextKeyView:或setInitialFirstResponder:直到它再次运行的呼叫.违规的电话很可能试图修改中存在的主要观点环路NSScrollView或NSTabView之后,这些对象都已经做了他们幕后的环改写(munging).将呼叫移至较早的点,或不执行.(如果您没有打电话setNextKeyView:,请检查您的笔尖 - 确保窗口initialFirstResponder已设置,并且nextKeyView出口按您希望的方式链接在一起.)在"系统偏好设置/键盘和鼠标/键盘快捷键"中,在"全键盘访问"下的窗格底部,您可以控制键视图循环是包含所有控件还是仅包含文本字段和滚动列表(^ F7切换).您应该在每种状态下使用此设置测试关键视图循环.
这些指南是通过实验确定的,可能并不完全准确.我们非常欢迎更正和进一步解释.
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |