【问题标题】:Change Right Bar Button Items on Current Screen更改当前屏幕上的右栏按钮项目
【发布时间】:2021-05-01 18:52:22
【问题描述】:

我花了一整天的时间试图弄清楚这一点,我感到非常沮丧。

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

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

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

我尝试了以下方法:

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

和:

navigationItem.rightBarButtonItems = [arrayOfBarButtonItems]

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

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

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

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

【问题讨论】:

  • navigationItem.rightBarButtonItems = [arrayOfBarButtonItems] 应该可以工作。你能展示你如何呈现当前视图控制器的代码吗?
  • 您应该可以使用 viewDidLoad 函数中的 title = "New Title" 更新标题。视图控制器是嵌入在导航控制器中,还是您正在向视图控制器本身添加导航栏?
  • @aheze 我添加了有关如何将视图控制器添加到导航控制器的代码。
  • @James 视图控制器嵌入在导航控制器中。我已经更新了上面的代码。

标签: ios swift uinavigationcontroller uinavigationbar uibarbuttonitem


【解决方案1】:

从控制器中设置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", style: .done, target: self, action: #selector(rightButtonPressed(_:)))
        self.navigationItem.rightBarButtonItems = [rightButton]
    }
    @objc func leftButtonPressed(_ sender: UIBarButtonItem) {

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

    }
}

【讨论】:

  • 这正是我正在做的。在我的视图控制器的 viewWillAppear 中,我试图设置栏按钮项。它们没有出现在当前视图控制器上。它们出现在堆栈中的前一个视图控制器上。
  • 我不知道您如何展示控制器才能知道您的问题是什么。尝试通过导航控制器的顶部控制器属性 navigationController?.topViewController?.navigationItems = 设置控制器
  • 这是对我有用的解决方案。非常感谢!
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多