2017-04-13 40 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

这和我的问题中的代码有什么区别? –