【问题标题】:How can I hide one bar button item on a certain view controller and show it again?如何在某个视图控制器上隐藏一个条形按钮项并再次显示?
【发布时间】:2020-05-12 21:44:11
【问题描述】:

仅当显示特定的 ViewController 时,我才想附加 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)
    }

当显示另一个 ViewController 时,我想再次删除它:

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

这会删除 barButtonItem,但是当我再次选择它时,它会崩溃,因为索引 2 处不再有按钮。我对我的 tabBarItems 做了一些熟悉的事情,在那里我检查了项目的数量:

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)
    }

【问题讨论】:

  • 我不太明白你的问题,但据我所知,navigationItem.rightBarButtonItems 是一个数组,你可以检查它的计数以及索引 2 处的元素是否存在。

标签: ios swift


【解决方案1】:

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

如果您只想向特定控制器显示一个项目,您可以在 viewWillAppear 中将其设为可见,而在 viewWillDisappear 中您可以将其隐藏。

【讨论】:

  • 我已经尝试过这种方法,但它不起作用。选择视图控制器时没有添加按钮
【解决方案2】:

我认为 navigationItem.rightBarButtonItems 没有 count 方法,因为 Xcode 总是将其标记为红色......但我只是在其他地方忘记了一个右括号......

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

似乎为我解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多