为什么设置initialFirstResponder没有效果?

ryt*_*tis 7 user-interface cocoa first-responder

我有一个简单的表单(NSWindow),有3个文本字段.NSWindow initialFirstResponder正在"指向"第一个字段(NSTextField).所有三个文本字段通过循环链接nextKeyView.

我遇到的问题是,当我从Xcode启动应用程序时,它将关注应用程序关闭时最后一个活动(焦点)的文本字段.

例如,如果我将文本字段命名为A,B和C并initialFirstResponder设置为A.现在,如果我启动应用程序,关注B,并关闭应用程序,下次启动时,焦点将放在B.

为什么这样,我将如何解决这个问题?

(对不起,如果这是一个微不足道的问题,这些是我在可可的第一步......)

编辑:

这是在OS X Lion 10.7.1,Xcode 4.1上.

编辑2:

我找到了一种方法来"修复"这个...在主窗口(或任何窗口)XIB/NIB文件中,单击"属性检查器",然后取消选中"可恢复"框.现在,应用程序将不会存储最后一个位置,因此initialFirstResponder视线将得到尊重并相应地遵循.

jtb*_*des 7

欢迎来到可可!:)我怀疑这是OS X Lion中新用户界面保存功能的一部分.(事实上​​,我刚刚创建了一个包含3个文本字段的简单应用程序,我也看到了这种行为.)因为windows会自动恢复,所以即使你没有实现它,你也会看到很多这种行为自动发生.这可能是可取的 - 大多数应用程序将以这种方式工作,并且用户将期望它.

但是,如果你真的想要禁用它,你可以通过继承NSWindow或NSTextField并覆盖它来实现-encodeRestorableStateWithCoder:.但是,我绝对建议你单独保留默认行为.


使用更多信息进行编辑:应用程序状态似乎存储在~/Library/Saved Application State/com.yourapp.savedState.在那里,您可以看到包含有关窗口信息的plist文件.其他文件似乎不易读取,但它们可能包含有关哪个字段是第一响应者的信息等.

  • 只是一个更新,我想我找到了一种强制执行此行为的方法......在属性检查器中有一个可恢复的chechkbox.解开它似乎是诀窍...... (3认同)