2017-04-13 34 views
0

我有一個UINavigationController的子類,叫做NavController。我繼承它的原因是因爲我正在編程構建用戶界面,對於這個特定的導航類,我需要在其導航欄左/右部分的特定按鈕。Swift 3 - 添加導航項到UINavigationController子類

這是我在子類:

import UIKit 
class NavController: UINavigationController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.backgroundColor = UIColor.white 
    self.navigationBar.alpha = 1.0 
    self.navigationBar.barTintColor = UIColor.navi 
    self.navigationBar.isTranslucent = false 
    self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] 

    // tearing my hair out here 
    let refresh = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.refresh, target: self, action: #selector(doSomething)) 


    self.navigationItem.leftBarButtonItem = refresh 

} 

func doSomething() { 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

是不是訪問來自selfnavigationItem.leftBarButtonItem? 我頭髮枯竭了。

在此先感謝。

+0

雅您可以用它來把圖像中的導航欄也有不同的方法。 –

回答

2

快速anwser:

navigationItem.leftBarButtonItem是在UINavigationController的視圖控制器中,不導航控制器本身的屬性。

如:

let firstVC = UIViewController() 
let firstBarItem = UIBarButtonItem() 
firstVC.navigationItem.rightBarButtonItem = firstBarItem 
let nc = UINavigationController(rootViewController: firstVC) 

導航控制器現在顯示firstBarItem

let secondVC = UIViewController() 
let secondBarItem = UIBarButtonItem() 
secondVC.navigationItem.rightBarButtonItem = secondBarItem 

nc.pushViewController(secondVC, animated: true) 

導航控制器現在顯示secondBarItem

如果你彈回至firstVC,它會自動顯示firstBarItem

+0

我明白了。那麼我怎樣才能從導航控制器本身訪問它? –

+1

您可以從導航控制器的子視圖控制器中獲取最後一個視圖控制器(當前顯示的視圖控制器):'nc.viewControllers.last?.navigationItem.rightBarButtonItem' –

+0

因此,我應該重複相同的代碼以在每個孩子中添加按鈕的viewController? –

0

是否要在導航欄中顯示refresh按鈕?但目前的代碼不能這樣做,對吧?讓使用以下代碼:

if let navigationItem = navigationBar.items?.first { 
    navigationItem.leftBarButtonItem = refresh 
} 
+0

它沒有工作。 –

0
// Below Code is for Left Side UIBarButtonItem for Navigation Bar 
let leftItemBarButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(leftBarButtonTapped)) 

self.navigationItem.leftBarButtonItem = leftItemBarButton 

func leftBarButtonTapped() { 
print("Left Bar Button Item") 
} 

// Below Code is for Right Side UIBarButtonItem for Navigation Bar 

let rightItemBarButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(rightBarButtonTapped)) 

self.navigationItem.rightBarButtonItem = rightItemBarButton 

func rightBarButtonTapped() { 
print("Right Bar Button Item") 
} 

,如果你想使用的UIBarButtonItem方法

+0

這和我的問題中的代碼有什麼區別? –

相關問題