1

これは以前に尋ねられた質問とは少し異なる質問です。 だからいいね。アプリケーション全体に対してUINavigationBarをカスタマイズする方法は?

  • アプリ全体にさまざまな色のナビゲーションバーがあります。
  • アプリ全体には、ナビゲーションバーにはほとんどオプションがありません。彼らはすべて同じです。

とは何ですか?

私はUINavigationControllerのためにこの拡張を作成しました。私は表示コントローラのようにナビゲーションバーの背景色を変更することができます。

extension UINavigationController { 

    func updateNavigationBar(withViewControllerID identifier: String?) { 

     setupNavigationBarButtons() 

     if identifier == kFirstVCIdentifier { 
      self.navigationBar.tintColor = .white 
      self.navigationBar.barTintColor = .red 
     } else if identifier == kSecondVCIdentifier { 
      self.navigationBar.tintColor = .white 
      self.navigationBar.barTintColor = .green 
     } else if identifier == kThirdVCIdentifier { 
      self.navigationBar.tintColor = .white 
      self.navigationBar.barTintColor = .blue 
     } 

     self.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white] 

     self.navigationBar.isTranslucent = false 
     self.navigationBar.clipsToBounds = false 
     self.navigationBar.shadowImage = UIImage.init() 
     self.view.backgroundColor = .clear 
    } 

    internal func setupNavigationBarButtons() { 
     let barButtonItemSettings = UIBarButtonItem.init(title: "Settings", style: .plain, target: self, action: #selector(actionSettings)) 
     let barButtonItemSpace = UIBarButtonItem.init(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
     let barButtonItemLogOut = UIBarButtonItem.init(title: "LogOut", style: .plain, target: self, action: #selector(actionLogOut)) 
     let buttons = [barButtonItemSettings, barButtonItemSpace, barButtonItemLogOut] 
     self.navigationItem.rightBarButtonItems = buttons 
    } 

    @objc internal func actionSettings() { 
     print("Settings") 
    } 

    @objc internal func actionLogOut() { 
     print("LogOut") 
    } 
} 

そして、私はその拡張内UIBarButtonを追加しようとしていますが、彼らは表示されません。だから私はそれを修正する必要があります。それが見えるようになったら、私はUIBarButtonのタッチイベントをアプリケーション全体で処理できるように、どのようにそのアクションを呼び出すのですか? 正しく?パッチはありません。

私はこのようにそれを使用しています:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated)  
    self.navigationController?.updateNavigationBar(withViewControllerID: self.restorationIdentifier?) 
} 
+0

あなたは、ナビゲーションバーを非表示にし、カスタムビュー –

+0

を作ることができ、あなたがこれを必要とする理由、それは –

答えて

2

はこれを試してみて、UINavigationItemの拡張子を確認します。

extension UINaviationItem { 

func setupNavigationBarButtons() 
{ 
    let barButtonItemSettings = UIBarButtonItem.init(title: "Settings", style: .plain, target: self, action: #selector(actionSettings)) 
    let barButtonItemSpace = UIBarButtonItem.init(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
    let barButtonItemLogOut = UIBarButtonItem.init(title: "LogOut", style: .plain, target: self, action: #selector(actionLogOut)) 
    let buttons = [barButtonItemSettings, barButtonItemSpace, barButtonItemLogOut] 
    self.rightBarButtonItems = buttons 
} 

@objc func actionSettings() { 

    print("Settings") 

    if let current = UIApplication.shared.delegate?.window 
    { 
     var viewcontroller = current!.rootViewController 
     if(viewcontroller is UINavigationController){ 
      viewcontroller = (viewcontroller as! UINavigationController).visibleViewController 

      print("currentviewcontroller is %@/",viewcontroller)  
    } 
    } 
} 
@objc func actionLogOut() { 
    print("LogOut") 
} 

} 

self.navigationController?.updateNavigationBar(withViewControllerID: "second") 
self.navigationItem.setupNavigationBarButtons() 
+0

@Hemangを助けるかもしれない、self.viewControllers.lastにターゲット自己を変更しようとしました。あなたは、バーボタンクリックでデリゲートまたはビューコントロールを使用することができます。私は現在、目に見えるコントローラを手に入れています。クリックの設定で更新の回答を確認してください。 –

+0

@Hemang現在のviisble conteollerのコードを書いています –

関連する問題