禁用导航栏按钮项

Ale*_*exR 9 objective-c uikit uinavigationcontroller uibarbuttonitem ios

将右侧导航栏按钮设置为禁用时,它不会更改其颜色以向用户发出其禁用状态信号.

它仍然是"突出显示的",不是灰色的.

我在Storyboard中设置了按钮,如下所示:

在此输入图像描述

self.navigationController.navigationItem.rightBarButtonItem.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

我还需要做些什么来直观地改变按钮状态?

谢谢!

sim*_*ley 5

感谢维杰-苹果Dev.blogspo了这个答案.

self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

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

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

再次感谢Vijay注意到使用它可能更好:

self.navigationItem.hidesBackButton = YES;
Run Code Online (Sandbox Code Playgroud)

由于Apple不喜欢禁用后退按钮.

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

这里是问题的链接

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


Mik*_*ike 5

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

[navButton setTitleTextAttributes:@{NSForegroundColorAttributeName:enabledColor} forState:UIControlStateNormal];
[navButton setTitleTextAttributes:@{NSForegroundColorAttributeName:disabledColor} forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)

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

navButton.enabled = YES; // or NO
Run Code Online (Sandbox Code Playgroud)


Jus*_*der 0

您可以尝试手动更改色调颜色,如下所示:

    self.navigationItem.rightBarButtonItem.tintColor = [UIColor grayColor];
Run Code Online (Sandbox Code Playgroud)

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