2017-05-30 5 views
1

私のジェンスのrecongnizerのすべてのアプリケーションにUIViewController要素に単一のロジックを適用する必要があります。UIViewController基底クラス - それは良いかどうかです

私は基本クラスの作成を考えました。しかし、私が知る限り、強力な必要性のためだけに、継承チェーンに余分なレイヤーを追加する必要があります。

上記の機能を私のプロジェクトに追加する最も効率的な方法は、各マイニングコントローラにコードをコピーして貼り付けることなくですか?

+0

baseviewcontrollerを使用し、基底クラス –

+2

のサブクラスを呼び出します。ベースコントローラは単純で、誰もが使用しています。しかし、 'UITableViewController'、' UINavigationController'、 'UICollectionViewController'などを使い始めると問題に遭遇します。可能であれば、カテゴリを使って機能を追加し、すべてのコントローラで明示的に有効にしてください。 – Sulthan

答えて

2

あなたは

class SomeViewController:UIViewController{ 

    let gestureRecog = UIGestureRecognizer() 

    //call the method 
    func someMethod() 
    { 
    self.applyTheRequiredPropertiesToGestureRecognizer(gestureRecog) 
    } 
} 
1

を使用している間baseviewControllerを行いその後UIViewController

extension UIViewController 
{ 
    // write code that has to be used in all view controllers 
    func applyTheRequiredPropertiesToGestureRecognizer(gr:UIGestureRecognizer) 
    { 
     // do whatever you want to do 
    } 
} 

の拡張を使用して、汎用または警告のようなビューコントローラのほとんどで使用されているすべての機能を行うことができます。

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() 
} 
} 

は、ニーズに従ってジェスチャー機能をカスタマイズします。

1

ベースコントローラーの使用は確かに一般的なアプローチです。

一般的なベースコントローラは、複数のコントローラーで使用される機能のためのダンプグランドになることが多く、過度の負荷になります。

また、私は私のプロジェクトでは、このパターンに従ったが、私はSulthan's commentと合意などUITableViewController, UICollectionViewController

のような他のコントローラを使用して起動したときに、後でそれは私のために複雑になる:カテゴリを使用して、すべてのコントローラに明示的にそれをオンに間違いなく良い選択肢になるでしょう。

+0

機能のための投棄地についての非常に良いコメント。私はこれとよく似たコードを見てきました。特定のコントローラになければならないナビゲーションバーボタンの異なるタイプを作成するが、それはベースコントローラ内で終了する。悪いアーキテクチャの典型的な例は、コントローラがベースコントローラによって提供されるいくつかの機能をオフにしなければならない場合です。 – Sulthan

関連する問題