2016-05-19 81 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" 
    } 
} 

我不知道的事實,我想這NavigationController有TabBarController被影響的觀點負載的方式整合,但這種風俗NavigationController正在由TabBarController每個選項卡的子類。

回答

0

根據UINavigationItem類引用,每個視圖控制器都有自己的UINavigationItem實例。 「管理UINavigationController對象使用最頂端的兩個視圖控制器的導航項目來填充導航欄內容」,這意味着它的UIViewController有責任創建導航項目內容,例如左欄項目或標題。
我可以理解你想在整個應用程序中提供相同的導航欄外觀。但爲什麼你想爲所有視圖控制器設置相同的標題?但是,如果所有視圖控制器的相同標題和相同的左欄項目是您所需要的。這裏有兩種解決方案:
1)。做一個擴展UIViewController

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

然後每當你需要一個視圖控制器的自定義導航欄,調用此函數customAppearance

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

對於customzing UINavigationBar的外觀,你可以將它像:

UINavigationBar.appearance().barTintColor = UIColor.purpleColor() 
相關問題