为什么@IBAction会在启动时自动调用?

时间:2016-03-17 14:07:34

标签: xcode cocoa storyboard ibaction

如果您创建一个新的Cocoa项目并将NSTextField Object Library 拖放到您的视图控制器(启动时是您的初始控制器),并创建一个{{1} (在其中添加@IBAction)和print(called),然后运行应用,然后在启动时看不到@IBOutlet方法。

然后,如果在文本字段上按 return ,则会调用该操作。但是,这很重要,在您退出应用程序然后再次启动应用程序之后,您现在可以看到@IBAction在启动时因某些原因被调用(如果您不这样做,请尝试一下时间)。

实际上我想知道为什么@IBAction总是在我的开发应用程序中被启动时调用,并搜索在我的所有类中调用它的任何方法,但后来发现即使我开始一个新的这个奇怪的问题也会发生项目并创建一个连接,并尝试启动并发送几次试错的动作。

我还注意到我创建了五个新项目,并确认这一切都发生在所有五个项目中。

为什么会这样?另外,如果这是Apple方面的错误,有没有办法禁用我项目中@IBAction的自动执行?

我首先设置@IBAction并将其设置为textField.editable = false中的textField.editable = true,但仍会在启动时触发操作。有没有办法解决这个问题?

似乎如果我通过点击红色图标并退出应用程序来关闭窗口,然后再从Xcode中再次启动它,则不会调用viewDidAppear:。这太奇怪了......

1 个答案:

答案 0 :(得分:2)

这似乎与OS X上的窗口恢复有关。

视图加载时,您的文本字段被设置为第一个响应者。然后,在恢复期间,窗口成为第一响应者。这会导致文本字段重新启动第一响应者,从而触发操作。

在IB中,您可以将文本字段的操作设置为“仅在输入时发送”。 (默认情况下,它是“结束编辑”。)

或者,如果您愿意,可以使您的窗口不可恢复。