禁用导航栏按钮项

Posted

技术标签:

【中文标题】禁用导航栏按钮项【英文标题】:Disabling a Navigation Bar Button Item 【发布时间】:2013-06-25 14:37:45 【问题描述】:

将右侧导航栏按钮设置为禁用时,它不会更改其颜色以向用户表明其禁用状态。

它保持“突出显示”,非灰色。

我在 Storyboard 中的按钮设置如下:

self.navigationController.navigationItem.rightBarButtonItem.enabled = NO;

我还需要做什么才能在视觉上更改按钮的状态?

谢谢!

【问题讨论】:

是自定义按钮吗?启用设置为 FALSE 应该使常规 UIBarButtonItem 变暗 @ChrisH,我已经更新了我的问题。 如果您以编程方式添加“完成”按钮会发生什么? 我不能,因为我根据 Storyboard 中的按钮硬编码了一个 segue。 【参考方案1】:

感谢 Vijay-Apple-Dev.blogspo 这个答案。

self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;

这似乎会自动使按钮变灰并禁用它们。

注意:问题中的假设 self.navigationController.navigationItem.rightBarButtonItem.enabled = NO; 作品似乎是错误的,在我的代码中试用后发现它没有效果。

再次感谢 Vijay 指出使用它可能会更好:

self.navigationItem.hidesBackButton = YES;

因为 Apple 不喜欢禁用后退按钮。

我个人将禁用右上角按钮并隐藏后退按钮以阻止用户按下它们,然后在我选择时再次启用它们。

问题的链接是here

发布此答案是为了完整性,因此未来的用户无需继续搜索此页面。

【讨论】:

【参考方案2】:

没有一个相关的答案能够产生我正在寻找的结果 - 但我能够通过在我的导航按钮上设置文本属性来解决这个问题:

[navButton setTitleTextAttributes:@NSForegroundColorAttributeName:enabledColor forState:UIControlStateNormal];
[navButton setTitleTextAttributes:@NSForegroundColorAttributeName:disabledColor forState:UIControlStateDisabled];

然后,我需要做的就是以下操作,用户交互性和颜色会自动更改:

navButton.enabled = YES; // or NO

【讨论】:

我喜欢在发布解决方案一个月后遇到这个问题,而我自己的解决方案回答了我的问题。【参考方案3】:

试试这样的:

[[self.navigationItem.rightBarButtonItems objectAtIndex:0] setEnabled:NO];

【讨论】:

【参考方案4】:

更新为:

self.navigationItem.leftBarButtonItem?.isEnabled = true

【讨论】:

【参考方案5】:

您可以尝试像这样手动更改色调颜色:

    self.navigationItem.rightBarButtonItem.tintColor = [UIColor grayColor];

这是未经测试的代码,但它应该可以工作。另外,再次启用时不要忘记将其更改回来。

【讨论】:

应该是[UIColor grayColor]

以上是关于禁用导航栏按钮项的主要内容,如果未能解决你的问题,请参考以下文章

导航左栏按钮项作为图像徽标

动态禁用导航按钮和标签栏

MFMailComposeViewController 导航栏按钮被禁用

按下按钮并成功重定向到另一个页面后,如何禁用导航栏链接?

导航栏标题视图与左栏按钮项重叠

无法在导航栏中设置左栏按钮项?