UIViewController基类 - 是好还是不好

时间:2017-05-30 06:27:14

标签: ios objective-c uiviewcontroller

我必须将手势识别器的单一逻辑应用于我应用中的所有UIViewController元素。

我想过创建一个基类。但是,据我所知,我们应该只为了强烈的必要性而在继承链中添加额外的层。

在我的项目中添加上面提到的功能的最有效方法是什么,没有将代码复制粘贴到每个控制器?

3 个答案:

答案 0 :(得分:2)

您可以使用UIViewController的扩展名 扩展UIViewController {    //编写必须在所有视图控制器中使用的代码    func applyTheRequiredPropertiesToGestureRecognizer(gr:UIGestureRecognizer)    {       // 做任何你想做的事    } } 稍后使用时 class SomeViewController:UIViewController {    let gestureRecog = UIGestureRecognizer()    //调用方法    func someMethod()    {      self.applyTheRequiredPropertiesToGestureRecognizer(gestureRecog)    } }

答案 1 :(得分:1)

创建一个baseviewController并执行所有通用的功能或在大多数视图控制器中使用的功能,如警报。

class BaseViewController: UIViewController {
 func yourGestureRecogniser() {
  // do the process
 }
}

然后将基本视图继承到其他视图控制器,如

class ViewController1: BaseViewController {
 override func viewDidLoad() {
    super.viewDidLoad()
    yourGestureRecogniser()
 } 
}

class ViewController2: BaseViewController {
 override func viewDidLoad() {
    super.viewDidLoad()
    yourGestureRecogniser()
 } 
}

根据您的需要自定义手势功能。

答案 2 :(得分:1)

使用基本控制器当然是一种常见的方法。

通用基本控制器通常会成为多个但不是所有控制器中使用的功能的转储基础,因此它变得过度。

我也在我的项目中遵循了这种模式,但后来当我开始使用其他控制器如UITableViewController, UICollectionViewController等时,它变得很复杂。

同意Sulthan's comment使用类别并在每个控制器上明确启用肯定是更好的选择。

相关问题