【问题标题】:Reuse identical delegate methods in multiple controllers?在多个控制器中重用相同的委托方法?
【发布时间】:2014-08-26 15:22:33
【问题描述】:

我有一个UITextFieldDelegate 方法shouldChangeCharactersInRange,它在多个视图控制器中完全相同,所以我必须将它复制粘贴到每个符合UITextFieldDelegate 的视图控制器中。我喜欢坚持 DRY,在这里我在很多视图控制器中都有相同的代码。是否可以重用委托方法以及有什么好的方法,或者这是唯一/最佳的方法,为什么?

【问题讨论】:

    标签: ios objective-c delegates dry reusability


    【解决方案1】:

    创建一个UIViewController 的子类,它只实现您希望的委托方法。将此设置为项目中所有希望使用委托方法的视图控制器的父类。

    除此之外,您还可以尝试查看类别。在UIViewController 上创建一个类别,命名为您想要的任何名称。将您希望实现的委托方法添加到此类别。现在,您#import 这个类别的所有视图控制器都将实现委托方法。

    【讨论】:

      【解决方案2】:

      您可以创建一个父对象类,您的所有视图控制器都从该类继承。将委托方法代码放在父对象实现中。

      【讨论】:

        【解决方案3】:

        您可以创建一个符合UITextFieldDelegate 并继承自NSObject 的对象。

        然后,在每个视图控制器上,您可以创建该对象的一个​​实例,将其存储在一个属性中,并将您的 UITextField 的委托分配给该对象。

        【讨论】:

        • 我建议 Painted Black 的解决方案更好。这是子类的经典案例。它可以通过任何一种方式完成,但使用子类您仍然可以覆盖和修改行为。代码也更少。创建一次,然后忘记它。
        • 不,Marcelo 的回答更好,因为他的委托类可以独立于视图控制器层次结构进行子类化。
        • 最后,Apple 提倡拆分视图控制器和数据源/委托。更多信息请参见 wwdc14 视频«Advanced User Interfaces with Collection Views»
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多