2017-11-20 5 views
0

と呼ばれていない:スウィフト:カスタムUINavigationController私はプログラム的に私のナビゲーションコントローラのルートコントローラを変更したい

import UIKit 
import Foundation 

class NavigationController : UINavigationController { 
    override init(rootViewController : UIViewController) { 
     print("TEST") 
     super.init(rootViewController : rootViewController) 
    } 

    override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) { 
     print("TEST2") 
     super.init(navigationBarClass : navigationBarClass, toolbarClass : toolbarClass) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 

私はストーリーボード

に私のナビゲーションコントローラのカスタムクラスとしてコンソールをNavigationControllerクラスを設定します私のテスト出力は表示されません。私は間違って何をしていますか、ここでどのようにルートコントローラを変更できますか?

答えて

1

あなたは、このメソッド呼び出しているStoryboardからカスタムNavigationControllerをインスタンス化した場合:

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

は、たとえば、あなたがプログラムでそれを初期化する必要がコンソールにあなたのプリントを表示するには:

let navVC = NavigationController(rootViewController: yourVC) 
+0

あなたが正しいです、私は必要な方法で印刷物を忘れました。 しかし、rootViewControllerを変更するにはどうすればいいですか? –

+0

入手した:以下の私の答えを参照 –

+0

iOSの開発は非常に奇妙です...助けてくれてありがとう! –

0

をそれを入手しました:

import UIKit 
import Foundation 

class NavigationController : UINavigationController { 
    override init(rootViewController : UIViewController) { 
     super.init(rootViewController : rootViewController) 
    } 

    override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) { 
     super.init(navigationBarClass : navigationBarClass, toolbarClass : toolbarClass) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let newViewController = storyBoard.instantiateViewController(withIdentifier: "new_main_view") as! ViewController 
     self.setViewControllers([newViewController], animated: false) 
    } 
} 

これは、ユーザーに同じビューの2つの「テーマ」を提供するための推奨された方法ですか?

関連する問題