将自定义参数传递给 uibutton #selector swift 3

Posted

技术标签:

【中文标题】将自定义参数传递给 uibutton #selector swift 3【英文标题】:pass custom parameter to uibutton #selector swift 3 【发布时间】:2017-01-25 08:39:51 【问题描述】:

我有 2 个班级,我将 uistackviews 从一个班级传递到另一个班级。我希望在相同的stackview 中创建控件。因此,我在所有渲染函数参数中传递视图。我还希望通过#selectoruibutton 的操作来传递该视图

第 1 类:

class ViewController: UIViewController     
  func createbutton(parentview: UIStackView) 
    let buttn = UIButton()
    buttn.backgroundColor = .gray
    buttn.setTitle("testttt", for: .normal)
    buttn.frame.size.height = 30
    buttn.frame.size.width = 40
    buttn.addTarget(self, action: #selector(anotherbutton(parentview:)), for: .touchUpInside)
    parentview.addArrangedSubview(buttn)
   

  func anotherbutton(parentview: UIStackView) 
    //another button here
      

  func loadpage() 
    print("loadpage")
  

第 2 类:

class plugin : UIViewController        

let vw = ViewController()

override func viewDidLoad() 
    super.viewDidLoad()
    let parentview = getparentnode()
    vw.createbutton(parentview: parentview)


func getparentnode() -> UIStackView 
    let parentnode =  UIStackView()
    parentnode.axis  = UILayoutConstraintAxis.vertical
    parentnode.distribution  = UIStackViewDistribution.equalSpacing
    parentnode.alignment = UIStackViewAlignment.center
    parentnode.spacing   = 16.0
    parentnode.tag = 50
    parentnode.translatesAutoresizingMaskIntoConstraints = false;

    self.view.addSubview(parentnode)
    //Constraints
    parentnode.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
    parentnode.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
    return parentnode


但这会引发错误unrecognized selector sent to instance 0x7b25e010'

如何在动作选择器参数中传递 UIView?感谢您的帮助

【问题讨论】:

你不能这样做。 【参考方案1】:

你不能。您可以通过选择器传递的唯一内容是:

    什么都没有 对象本身(在本例中为按钮)

这些场景如下所示:

button.addTarget(self, action: #selector(myFunc), ...) //no parameters

button.addTarget(self, action: #selector(myFunc(_:)) //passes itself (the button)

如果您想将视图的值传递给另一个 ViewController,我建议使用 prepareForSegue 方法。这就是您应该将数据从 ViewController 传递到 ViewController 的方式。

就您的其余代码而言,我相信您通过在另一个类中创建您的类的实例来打破 MVC 设计模式(这一行:let vw = ViewController())。首先,如果您的 ViewController 与您设备上运行的不同,这将创建一个全新的实例。其次,这是不好的做法。您应该允许每个 viewController 自行管理,而不会受到其他 viewController 的外部干扰。使用prepareForSegue 是有效使用MVC 设计模式的一个例子。

希望这会有所帮助。

【讨论】:

以上是关于将自定义参数传递给 uibutton #selector swift 3的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义参数传递给事件处理程序

将自定义表单参数传递给表单集

Django 将自定义表单参数传递给 ModelFormset

Javascript:将自定义参数传递给回调函数

将自定义参数传递给 Qt/C++ 中的插槽

将自定义参数传递给 Symfony2 中的自定义 ValidationConstraint