在故事板OSX应用程序中设置initialFirstResponder

时间:2016-01-23 16:34:05

标签: xcode macos storyboard first-responder

this question类似,我试图在一个非常简单的应用中将第一个响应者设置为三个NSTextField中的第一个。那里的建议(在界面构建器中设置Window的第一响应者)似乎不再适用,至少在涉及故事板时不适用。 Window对象确实有一个initialFirstResponder出口,但我无法通过拖拽,按住Ctrl键等方式向NSTextField的任何一个方向设置它。

IB为我提供的结构包括一个链接到视图控制器场景的窗口控制器场景(本身只是一个空窗口)(后者又包含我的NSTextField和标签集)。

我怀疑有一些默认的假设/关联,Xcode被我的应用程序烘焙,导致Window控制器在运行时自动加载特定的视图,这就是为什么它不可能绑定一个它不知道的初始响应者关于建设时间。然后,我想知道哪个生命周期调用哪个对象是在它为时已晚之前调用self.view.window.initialFirstResponder = myTextField的正确点,以及如何最正确地获取对该对象的访问权。视图控制器中的viewWillAppearviewDidLoad感觉正确,但似乎无法可靠地产生任何影响(最初激活的NSTextField因运行而异,有时似乎跟踪代码更改,但要么时间不是)。

到目前为止,我已在GitHub

上发布了该代码

1 个答案:

答案 0 :(得分:3)

split(/\W+/)仅在NSWindow首次出现在屏幕上时应用。根据Xcode文档:

initialFirstResponder

如果你想设置一些东西作为第一响应者,那么你需要调用:

swift:`NSWindow initialFirstResponder` The view that’s made first responder (also called the key view) the first time the window is placed onscreen.

Obj-C:yourTextField.becomeFirstresponder()

希望有所帮助!

阿德

修改

我将你的.m简化为几行:

[yourTextField becomeFirstresponder];

我的错!抱歉,viewWillAppear(就在视图实际显示之前)是你放置的第一个响应者..

为错误道歉!