Swift 3.0向导航栏添加右键

我在视图控制器的顶部添加了一个导航栏。 我试图根据条件控制按钮是否可见,但是我在添加按钮时遇到问题。 到目前为止,我有,

var addButton: UIBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped)) override func viewDidLoad() { super.viewDidLoad() let boool = true if boool { self.navigationItem.rightBarButtonItem = self.addButton } else { self.navigationItem.rightBarButtonItem = nil } } func addTapped(sender: AnyObject) { print("hjxdbsdhjbv") } 

我认为它没有正常工作,因为我已经在VC中添加了导航栏,而不是使用导航控制器并在那里使用栏。 我想知道是否有办法使用此导航栏。

您说您通过故事板向视图控制器添加了UINavigationBar ,但查看您提供的代码,IB中的导航栏没有sockets连接。

为了访问self.navigationItem您的视图控制器必须嵌入在UINavigationController或者是层次结构的一部分。 除非您需要在单个视图控制器上使用自定义导航栏,否则我建议从Interface Builder中删除它,然后确保所讨论的视图控制器嵌入在UINavigationController或者将其从另一个控制器推送到导航堆栈它嵌入在导航控制器中,然后你应该看到你的UIBarButtonItem

这很简单。 将这行代码放到viewDidLoad

 self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped)) 
 let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method)) self.navigationItem.rightBarButtonItem = rightBarButtonItem 

首先,您需要将导航栏连接到IBOutlet,以便您可以在代码中引用它。 之后,此代码应该工作:

  let navigationItem = UINavigationItem(title: "Title") navigationItem.rightBarButtonItem = self.addButton navigationItem.hidesBackButton = true self.navigationBar.pushItem(navigationItem, animated: false)