我有两个类,我将uistackviews从一个类传递到另一个类。我希望在同一个stackview中创建控件。因此,我将在所有呈现函数参数中传递视图。我还希望通过#selector的actionuibutton来传递该视图。
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 in action选择器参数?谢谢你的帮助

最佳答案

你不能。你唯一能通过选择器的是:
没有什么
对象本身(在本例中是按钮)
这些场景如下:

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管理自己,而不受其他viewcontroller的外部干扰。使用prepareForSegue是有效使用mvc设计模式的一个例子。
希望这有帮助。

关于swift - 将自定义参数传递给uibutton #selector swift 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41846861/

10-14 22:29
查看更多