将自定义参数传递给 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
中创建控件。因此,我在所有渲染函数参数中传递视图。我还希望通过#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?感谢您的帮助
【问题讨论】:
你不能这样做。 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章