为什么UIButton使用目标操作设计模式而不是委托模式和UITextField的副Versa

时间:2016-12-14 11:47:39

标签: ios objective-c uibutton uitextfielddelegate target-action

任何人都可以帮助理解为什么Apple决定使用目标行动设计模式来处理UIButton而不是委托模式的事件吗?

或者,我可以说为什么Apple为UITextField选择委托设计模式,甚至同样的事情也可以通过Target Action实现。

3 个答案:

答案 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希望在代码中显示不同的模式。