如何在某个视图控制器上隐藏一个栏按钮项目并再次显示它?



仅当显示特定视图控制器时,我才想附加一个rightBarButtonItem


@IBAction func addView1(_ sender: UIButton) {
addSubViewController(withStoryboardId: "View1", beginningAtX: sender.frame.origin.x)
let barButton = UIBarButtonItem(title: "Title", style: .plain, target: self, action: nil)
documentFilter.tintColor = .white
self.navigationItem.rightBarButtonItems?.append(barButton)
}

当显示另一个视图控制器时,我想再次删除它:

@IBAction func addView2(_ sender: UIButton) {
addSubViewController(withStoryboardId: "View2", beginningAtX: sender.frame.origin.x)
self.navigationItem.rightBarButtonItems?.remove(at: 2)
}

这将删除barButtonItem,但是当我再次选择它时它崩溃,因为索引 2 处不再有按钮。我用我的选项卡栏项目做了一些熟悉的东西,我在其中检查项目的数量:

if (self.toolbarItems?.count ?? 0) > 0 {
toolbarItems?.remove(at: 0)
}

我将如何实现这一目标?


我已经尝试在我的View2中实现viewWillAppear((,但该按钮没有添加到rightBarButtonItems数组中

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let barBtn = UIBarButtonItem(title: "Title", style: .plain, target: self, action: nil)
self.navigationItem.rightBarButtonItems?.append(barBtn)
}

您可以使用UIViewController的viewWillAppear(:)和viewWillDisappear(:)函数来显示/隐藏导航栏按钮项。

如果您只想向特定控制器显示一个项目,则可以在viewWillAppear中使该项目可见,而在viewWillDisappear中,您可以隐藏相同的项目。

我认为导航项目没有计数方法,因为 Xcode 总是将其标记为红色...但我只在其他地方忘记了一个右括号..

if (self.navigationItem.rightBarButtonItems?.count ?? 0) > 2 {
self.navigationItem.rightBarButtonItems?.remove(at: index)
}

似乎为我解决了问题。

最新更新