【问题标题】:How to send additional parameter in addtarget function?如何在 addtarget 函数中发送附加参数?
【发布时间】:2016-10-17 17:19:51
【问题描述】:

请任何人告诉我,如何在 swift 2.2 的 addtarget 函数中发送附加参数? 示例:

button.addTarget(self, action: #selector(classname.myFunc(_:)), forControlEvents: UIControlEvents.TouchUpInside))

func myFunc(sender:UIButton){
    print(“i am here“)
}

func myFunc(sender:UIButton,parameter:String){
    print(“i am here“)
}

【问题讨论】:

标签: ios swift uibutton


【解决方案1】:

我使用sender 属性来发送一些参数,比如

button.accessibilityHint = "param 1"
button.accessibilityValue = "param 2"
button.tag = 0

button.addTarget(self, action: #selector(buttonPressed(_:)),   forControlEvents: UIControlEvents.TouchUpInside))

func myFunc(sender:UIButton){

 print(sender.accessibilityHint) // param1
 print(sender.accessibilityValue) // param2
 print(sender.tag) // 0

}

【讨论】:

    【解决方案2】:

    Swift 5.0 代码

    theButton.addTarget(self, action: #selector(theFunc), for: .touchUpInside) 
    theButton.frame.name = "myParameter"
    

    .

    @objc func theFunc(sender:UIButton){ 
    print(sender.frame.name)
    }
    

    【讨论】:

      【解决方案3】:

      Swift 2.2 中,您可以执行类似的操作。

      myUISlider.addTarget(self, action:#selector(self.onSliderValChanged(_:withEvent:)), forControlEvents: .ValueChanged)
      
      func onSliderValChanged(slider: UISlider, withEvent event: UIEvent?) {
          }
      

      【讨论】:

        【解决方案4】:

        您可以创建UIButton 的子类,添加一个名为parameter 的属性作为额外参数传递。

        addTarget(),你只能选择是否传递调用者。在这种情况下,调用者是UIButton

        所以使用子类调用addTarget(),就可以得到你要发送的字符串了:

        func myFunc(sender: customUIButton) {
            // do something with sender.parameter
        }
        

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

          这是不可能的。您必须使用解决方法。

          button.addTarget(self, action: #selector(classname.myFunc(_:)), forControlEvents: UIControlEvents.TouchUpInside))
          
          func myFunc(sender:UIButton){
              self.myFunc2(sender, parameter: "My parameter")
          }
          
          func myFunc2(sender:UIButton,parameter:String){
          }
          

          【讨论】:

          • 除非参数是全局变量,否则这不会解决问题。如果是这种情况,那么我们不需要传递参数本身。 Selector 只能提供调用者作为发送者。仅此而已。
          • @kandelvijaya 你指的是什么问题? OP没有提到任何。无论如何,当点击 button1 时,OP 可能想用字符串 X 调用 myFunc2,而当点击 button2 时用字符串 Y 调用 myFunc2。所以这个设计没有错。
          猜你喜欢
          • 1970-01-01
          • 2016-10-21
          • 2015-10-05
          • 2018-06-02
          • 2017-09-19
          • 1970-01-01
          • 2014-06-07
          • 1970-01-01
          • 2017-07-08
          相关资源
          最近更新 更多