任何人都可以帮助理解为什么Apple决定使用目标行动设计模式来处理UIButton而不是委托模式的事件吗?
或者,我可以说为什么Apple为UITextField选择委托设计模式,甚至同样的事情也可以通过Target Action实现。
答案 0 :(得分:2)
对不同的方法有各种权衡。不过,我认为按钮操作的关键是你可以为一个按钮添加多个目标/动作。 (一对多的关系。)委托是一对一的关系,因此使用按钮触发多个动作(可能是针对不同的目标),使用委托设计模式是不可能的。
我认为如果Apple正在设计按钮处理,他们现在使用块/闭包而不是IBActions。控件可以包含一个块数组和触发每个块的事件。
答案 1 :(得分:1)
所有@IBAction
个函数都有三个签名之一;
functionName() -> Void
functionName(sender: Any) -> Void
functionName(sender: Any, forEvent event: UIEvent) -> Void
IBAction不能接受任何其他参数,也不会返回值。
委托允许使用带有不同参数和返回值的函数,而操作是跨UIView
子类的标准方法。
在某些类中,例如UITextField
,可以通过委托和操作方法处理某些操作。我想这只是给你一些选择;如果您已经在实现委托函数,那么您也不需要实现动作处理程序。
答案 2 :(得分:0)
这是因为Apple希望在代码中显示不同的模式。