Xcode8 无法将 multiple/single uibuttons 连接到 swift 文件中的单个 @IBAction

Xcode8 cannot connect multiple/single uibuttons to single @IBAction in swift file

我正在使用 Xcode 8 测试版。我无法从情节提要中拖动多个 UIButton 以连接到 swift 文件中的单个 @IBAction。漏洞?感谢您的帮助。

如果我是正确的,您需要使用 UIGestureRecognizer 将多项内容附加到一项操作中。

你可以做的是在每个按钮上放置一个 UIGestureRecognizer,然后像通常使用按钮(ctrl-drag)一样设置其中一个,而不是从其他手势识别器中 ctrl-drag 到你做的第一个动作。

我想这是另一个问题:如果您第一次尝试创建一个 IBAction,它工作正常。 但是,如果出于任何原因您决定重新连接 IBAction(将相同的操作连接到另一个对象,或重命名该函数),那么它将失败。

实际上,您创建了一个名为 doSomething 的 IBAction,它创建了一个函数 func doSomething(sender: UIButton)。 但是对于 XCode 8(或 Swift 2.3 / 3.0),此方法被解释为 func doSomethingWithSender(sender: UIButton).

我想这是一个错误,Apple 在 "rename Objc-methods" 的事情上有点过分了。

通过使用此解决方法,您可以添加现有操作,也可以将多个按钮连接到一个操作。

我认为 Xcode8 中存在错误。您可以通过将 sender 更改为 _ sender

来将 multiple/Single 按钮添加到单个操作/功能

例如:- 普通按钮

   @IBAction func huu(sender: UIButton) {

   }

您不能向此操作添加多个按钮或单个按钮,您需要像这样简单地更改,然后您可以通过使用从情节提要中拖动和连接来添加多个按钮。

 @IBAction func huu(_ sender: UIButton) {

 }

连接 IBOutlets 后 Xcode 将显示如下警告:-

要删除此警告,只需从 action/function 中删除 _ 符号。确保在连接您的 IBOutlets

后删除 _

希望对您有所帮助! :)

如果将发件人更改为 AnyObject 而不是 Any 或 UIButton 它将允许您将多个按钮连接到同一操作.

当您连接按钮操作时,默认情况下该方法如下所示:

@IBAction func s(_ sender: Any) {
    }

只需将 Any 更改为 UIButton,您就可以将更多按钮操作连接到此特定方法。

所以更改后应该是这样的:

@IBAction func s(_ sender: UIButton) {
    }

希望这能解决问题。 :)

我已将发件人从 Any 更改为 UIButton

控制拖动按钮到函数名称。

IN Swift 3 完整版可以使用。

只需将 Any 更改为 UIButton,您就可以将更多按钮操作连接到此特定方法。

所以更改后它应该如下所示:

@IBAction func s(_ sender: UIButton) { } 当然,这将解决问题。 :)

如果您将 "Any" 更改为 "UIButton",它将起作用。

我试了很多次,最后得到的结果是,

普通 UIAction

@IBAction func selectBtn(_ sender: Any) {

   }

对于具有相同 UIAction 方法的多个按钮,请尝试以下方法,

@IBAction func selectBtn(_ sender: UIButton) {

   }

这对我有用。我将 return 类型从 "Any" 更改为 "UIButton"

Below IBAction 仅适用于一个 Button。

@IBAction func singleButton(sender: Any) {
   // Write your logic
}

Below IBAction 将适用于多个按钮。

@IBAction func multipleButton(sender: UIButton) {
   // To find a particular button from an array of buttons
   if sender.tag == 1{
     // Write your logic
   }else if sender.tag == 2{
    // Write your logic
   }

}