我有两个类,我将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/