【问题标题】:Why is @IBAction automatically called on launch?为什么在启动时会自动调用@IBAction?
【发布时间】:2016-07-03 22:39:51
【问题描述】:

如果您创建一个新的 Cocoa 项目并将 NSTextFieldObject Library 拖放到您的视图控制器,这是您启动时的初始控制器,并创建一个 @IBAction(添加 @ 987654323@)和@IBOutlet,然后运行应用程序,然后你看不到启动时调用的@IBAction方法。

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

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

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

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

我一开始设置了textField.editable = false,然后在viewDidAppear:中设置为textField.editable = true,但仍然在启动时触发了动作。有什么办法可以解决这个问题吗?


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

【问题讨论】:

    标签: xcode cocoa storyboard ibaction


    【解决方案1】:

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

    当视图加载时,您的文本字段被设置为第一响应者。然后,在恢复过程中,窗口成为第一响应者。这会导致文本字段退出第一响应者,从而触发一个操作。

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

    或者,如果您愿意,可以将窗口设为不可恢复。

    【讨论】:

    • 哦,太棒了。那么在viewDidAppear:被调用之后,窗口恢复过程就完成了,对吧?
    • 根据一些 NSLog 语句,这是正确的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多