如何在导航栏中隐藏/显示右侧按钮

50

我需要隐藏导航栏中的右侧按钮,然后在用户选择某些选项后再显示它。

不幸的是,下面的代码无效:

NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES;  // FOO CODE

有没有办法?

18个回答

2

对于Swift 5,隐藏rightBarButtonItem的方法

self.navigationItem.rightBarButtonItem?.customView?.isHidden = true

2
您可以使用以下代码:

    self.navigationItem.rightBarButtonItem?.image = nil
    self.navigationItem.rightBarButtonItem?.isEnabled = false

2

Swift 2:

技巧!

隐藏:

if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
        btn.enabled = false
        btn.title = ""
}

展示:

if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
        btn.enabled = true
        btn.title = "ButtonName"
}

1
在Swift 4中,有一个技巧可以显示/隐藏右侧或左侧按钮:
步骤1:在视图控制器中创建一个IBOutlet按钮:
@IBOutlet var navigationItemButton: UIBarButtonItem!

步骤2:创建隐藏按钮功能:

Step 2: 创建隐藏按钮函数:

func hideNavigationButton() {
    navigationItemButton.isEnabled = false
    navigationItemButton.tintColor = UIColor.clear
}

步骤3:创建“显示”按钮函数:

Step 3: Create Show button function:

func showNavigationButton() {
    navigationItemButton.isEnabled = true
    navigationItemButton.tintColor = UIColor.white
}

步骤四:只需调用您想要的函数,使用hideNavigationButton()来隐藏按钮,使用showNavigationButton()来显示按钮。

祝好!


0

显示:

//set navigationItem tint color white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor];

隐藏:

//set navigationItem tint clear white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor clearColor];

虽然这会给人一种它被隐藏了的错觉,但它并没有禁用其功能。我相信这正是期望的效果。 - App Dev Guy
1
这不是一个合适的解决方案... 如果用户点击那部分,按钮操作将会执行... - Hardik Thakkar
我必须同意...这不是一个答案。 - arvidurs

0
假设您可以将特定的 bar button 引用为变量 `xxxButton`, 请打开助手编辑器,使用 Control+拖动 xxx 按钮到 YourViewController 类中,作为 outlet “xxxButton”。 或者使用类似于 `let xxxButton = navigationBar.buttons[1]` 这样的代码。
2. 隐藏 `xxxButton.customView = UIView()` 或 `navigationItem.rightBarButtonItems?.remove(at: (navigationItem.rightBarButtonItems?.index(of:xxxButton)!)!)`
3. 显示 `xxxButton.customView = nil` 或 `navigationItem.rightBarButtonItems?.insert(newElement: xxxButton, at:SOME_INDEX)`。
希望对您有所帮助。

0

将标题先设为空,然后在选择后再进行设置。


0

隐藏:

if let topItem = self.navigationController?.navigationBar.topItem {
    topItem.rightBarButtonItem = nil
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接