2015-02-07 63 views
1

我想將主頁按鈕添加到導航控制器。因此,我創建了下面的課程和分類我的導航控制器。我的按鈕出現在我的第一個視圖上。當我導航到其他視圖(我的圖片中的表格視圖)時,添加的按鈕消失。我正在使用segues推進另一種觀點。UINavigationController右鍵消失

class ThemedNavigationController: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     var home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction") 
     navigationBar.topItem?.rightBarButtonItem = home 

     navigationBar.barTintColor = anaRenk 
     navigationBar.barStyle = .Black 
     navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!] 
     UIBarButtonItem.appearance().setTitleTextAttributes(
     [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!], 
     forState: .Normal) 
    } 

    func doneAction() { // [6] 
     self.navigationController?.popToRootViewControllerAnimated(true) 

    } 
} 

enter image description here

之前我mainViewController沒有導航控制器。相反,每個按鈕都推動新的viewcontrollers有獨立的導航控制器和我的代碼正在工作。如果你能告訴我我該如何解決這個問題,我將不勝感激。

+0

這可能幫助:http://stackoverflow.com/questions/6389094/adding-same-button-to-all-view-controllers-in-uinavigationcontroller?rq=1 – Masa 2015-02-07 17:13:14

回答

0

您必須將每個控制器中的按鈕添加爲每個控制器上的導航欄更新時的按鈕。因此爲什麼後退按鈕標籤更改。

因此,將相同的代碼放在每個你想要一個home按鈕的控制器中。

我不會把任何代碼放在導航控制器本身。從您想要從家中彈出的第一個控制器開始。

更容易拖動使用故事板中的酒吧按鈕項目,然後創建一個動作,它彈出到根。

+0

感謝。然而,是否有任何簡單的方法來使用某些類等,以便我不會一遍又一遍地添加該主頁按鈕。 – Meanteacher 2015-02-07 17:52:52

+0

您可以爲每個使用viewDidLoad中的代碼的控制器類型創建一個子類。然後再次爲您的特定控制器類的子類。當你調用[super viewDidLoad]時,它會添加主頁按鈕。 – 2015-02-07 18:00:36

0

我想我做到了。它的工作原理,但我不知道它是否是最好的方法。如果您對任何可能的內存泄漏或崩潰問題發表評論,我將不勝感激。謝謝。

class ThemedNavigationController: UINavigationController { 

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

    var home:UIBarButtonItem! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction") 

     navigationBar.barTintColor = anaRenk 
     navigationBar.barStyle = .Black 
     navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!] 
     UIBarButtonItem.appearance().setTitleTextAttributes(
     [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!], 
     forState: .Normal) 
    } 

    override func pushViewController(viewController: UIViewController, animated: Bool) { 

    var exbutton = viewController.navigationItem.rightBarButtonItem? 
    if exbutton == nil { 
     viewController.navigationItem.rightBarButtonItem = home 
    } 
    else { 
     viewController.navigationItem.rightBarButtonItems?.insert(home, atIndex: 0) 

    } 

     super.pushViewController(viewController, animated:animated) 
    } 

    func doneAction() { // [6] 
     popToRootViewControllerAnimated(true) 
    } 
}