【问题标题】:Xcode8 cannot connect multiple/single uibuttons to single @IBAction in swift fileXcode8无法将多个/单个uibuttons连接到swift文件中的单个@IBAction
【发布时间】:2016-06-15 21:16:40
【问题描述】:

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

【问题讨论】:

    标签: ios swift uibutton swift3 xcode8


    【解决方案1】:

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

    我认为 Xcode8 中存在错误。您可以通过将sender 更改为_ sender 来将多个/单个按钮添加到单个操作/功能

    例如:- 普通按钮

       @IBAction func huu(sender: UIButton) {
    
       }
    

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

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

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

    要删除此警告,只需从操作/功能中删除 _ 符号。确保在连接您的 IBOutlets 后删除 _

    希望这会对您有所帮助! :)

    【讨论】:

    • 这是一个很好的答案,适用于 Xcode 8 的发行版。谢谢!另一个想法是完全删除参数。
    • @Chathuranga Silva - 它对我有用,谢谢。 @Daniel T 这也有效,谢谢。
    • 它有效...让我感到难过的是,我们现在要使用稳定版本的 Xcode...
    • 很棒的解决方法,但苹果应该承认这个错误。
    • 我的操作默认有“_ sender”,但将“Any”更改为“UIButton”对我有用。
    【解决方案2】:

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

    【讨论】:

    • 这行得通。我更改为AnyObject,它可以工作。显然,这是 Xcode 8.2.1 中的一个错误。
    【解决方案3】:

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

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

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

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

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

    希望这能解决问题。 :)

    【讨论】:

    • 这个也是为我做的!
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 感谢您的及时回复。我相信这也会奏效。但是,在以前版本的 XCode 中,您可以直接按住 ctrl 并拖动多个按钮到一个 IBAction。使用 xcode 8 beta,我不能再这样做了。我最终只是通过连接检查器手动连接它。
      【解决方案6】:

      Below IBAction 仅适用于一个按钮。

      @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
         }
      
      }
      

      【讨论】:

        【解决方案7】:

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

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

        我猜这是一个错误,Apple 在“重命名 Objc 方法”这件事上有点过分了。

        【讨论】:

        • 你找到解决办法了吗?
        • 不,这显然是 Xcode 的问题。要么 Apple 修复此问题,要么将代码转换为 Swift 3。
        【解决方案8】:

        我已将发送者从 Any 更改为 UIButton

        控制拖拽按钮到函数名。

        【讨论】:

          【解决方案9】:

          在 Swift 3 完整版中,这将起作用。

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

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

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

          【讨论】:

            【解决方案10】:

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

            普通 UIAction

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

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

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

            这对我有用。我将返回类型从“Any”更改为“UIButton”

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-07-29
              • 1970-01-01
              • 2022-01-26
              • 2014-07-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多