2016-05-19 20 views
2

カスタムナビゲーションバーを作成しようとしていますが、ナビゲーションバーのさまざまな部分を変更するのが難しいです。背景の色を変更することはできますが、ボタンを追加したり、タイトルを変更したりすることはできません。Swift:ナビゲーションコントローラにカスタムボタンを追加できません

class CustomNavigationController: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // changing the background color works 
     self.navigationBar.barTintColor = UIColor.purpleColor() 

     // none of this works 
     let leftButton = UIBarButtonItem(title: "Info", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(openInfo)) 
     self.navigationItem.leftBarButtonItem = leftButton 
     self.navigationItem.title = "MYTITLE" 
    } 
} 

私はTabBarControllerでこれNavigationControllerを統合しようとしているという事実は道ビュー負荷に影響を及ぼしているが、このカスタムNavigationControllerがTabBarControllerの各タブでサブクラス化されているかどうか。私はわからないんだけど

答えて

0

UINavigationItemクラス参照によれば、各ビューコントローラはそれ自身のUINavigationItemインスタンスを持つ。 「UINavigationControllerオブジェクトの管理では、最上位の2つのView Controllerのナビゲーション項目を使用してナビゲーションバーにコンテンツ(コンテンツ)を設定します。つまり、UIViewControllerは左の項目またはタイトルなどナビゲーション項目のコンテンツを作成します。
アプリ全体で同じような外観のナビゲーションバーを提供したいと考えています。しかし、なぜすべてのView Controllerに同じタイトルを設定したいのですか?ただし、すべてのビューコントローラの同じタイトルと同じ左のバー項目が必要なものである場合。ここに2つのソリューションがあります:
1)。このcustomAppearance機能

extension UIViewController { 
    func customAppearance() { 
     let leftButton = UIBarButtonItem(title: "Info", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(openInfo)) 
     self.navigationItem.leftBarButtonItem = leftButton 
     self.navigationItem.title = "MYTITLE" 
    } 

    func openInfo() { 
     // do what you want 
    } 
} 

をそして、あなたは、ビューコントローラ用にカスタマイズされたナビゲーションバーが必要なとき、その後、あなたは呼び出し::

let vc = YourViewController() 
    vc.customAppearance() 

2)UIViewControllerに拡張を行います。

class CustomViewController: UIViewController { 
    override func viewDidLoad() { 
     let leftButton = UIBarButtonItem(title: "Info", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(openInfo)) 
     self.navigationItem.leftBarButtonItem = leftButton 
     self.navigationItem.title = "MYTITLE" 
    } 

    func openInfo() { 

    } 
} 

そして、あなたのすべての他のビューコントローラは、このCustomViewControllerをサブクラス:UIViewControllerをサブクラス化。

UINavigationBarの外観をcustomzingするために、あなたは好きなように設定することができます

UINavigationBar.appearance().barTintColor = UIColor.purpleColor() 
関連する問題