我有两个课程,我将uistackviews
从一个班级传递给另一个班级。我希望控件在同一个stackview
中创建。因此,我在所有渲染函数参数中传递视图。我还希望通过#selector
uibutton
传递该视图
第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?感谢您的帮助
答案 0 :(得分:2)
你做不到。您可以通过选择器的唯一事项是:
这些情况如下所示:
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管理自己,而不是从其他viewControllers向外干扰。使用prepareForSegue
是有效使用MVC设计模式的一个示例。
希望这会有所帮助。