更改当前屏幕上的右栏按钮项目

问题描述

我花了一整天的时间试图解决这个问题,但我感到非常沮丧。

我有一个导航堆栈,在每个屏幕上,根据屏幕的内容,我需要隐藏/显示一些右栏按钮项目。但无论我做什么,项目都在堆栈上的前一个屏幕上发生变化,而不是在当前屏幕上。

我的视图控制器都被推送到导航控制器上。每个视图控制器都可以实例化另一个视图控制器并推送到导航堆栈上。

let vc = UnifiedArticleViewController()
        
navigationController?.pushViewController(vc,animated: true)

我尝试了以下方法

navigationController?.navigationBar.topItem?.rightBarButtonItems = [arrayOfBarButtonItems]

和:

navigationItem.rightBarButtonItems = [arrayOfBarButtonItems]

以及我从各种堆栈溢出建议中得到的各种其他建议。

我已经能够使用以下方法更改屏幕标题

navigationController?.navigationBar.topItem?.title = "New Title Here"

而且效果很好。我做错了什么?

解决方法

从导航控制器的视图堆栈中要设置按钮的控制器设置 leftBarButtonItemsrightBarButtonItems

class ViewController: UIViewController {
    override func viewDidLoad() {
        let leftButton = UIBarButtonItem(title: "Left",style: .done,target: self,action: #selector(leftButtonPressed(_:)))
        self.navigationItem.leftBarButtonItems = [leftButton]

        let rightButton = UIBarButtonItem(title: "Right",action: #selector(rightButtonPressed(_:)))
        self.navigationItem.rightBarButtonItems = [rightButton]
    }
    @objc func leftButtonPressed(_ sender: UIBarButtonItem) {

    }
    @objc func rightButtonPressed(_ sender: UIBarButtonItem) {

    }
}