禁用导航栏按钮项

10

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

它仍然保持“高亮”,未变灰。

我已经在Storyboard中如下设置了该按钮:

enter image description here

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

我需要怎么做才能在视觉上改变按钮的状态?

谢谢!


1
这是自定义按钮吗?将 enabled 属性设置为 FALSE 应该会使常规的 UIBarButtonItem 变暗。 - ChrisH
如果您以编程方式添加“完成”按钮,会发生什么? - ChrisH
我不能这样做,因为我在Storyboard中基于按钮硬编码了一个segue。 - AlexR
5个回答

5
Credit to Vijay-Apple-Dev.blogspot.com for this answer.
self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;

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

注意:问题中假设self.navigationController.navigationItem.rightBarButtonItem.enabled = NO;可行,但在我的代码尝试后发现它没有任何效果。

再次感谢 Vijay 指出更好的方法:

self.navigationItem.hidesBackButton = YES;

由于苹果公司不喜欢禁用“返回”按钮。

个人建议禁用右上角按钮并隐藏返回按钮,以防止用户按下它们,然后在需要时启用它们。

问题的链接在这里

本答案是为了完整性而发布,使未来的用户无需在这一页之外继续搜索。


5

所有相关的答案都不能给我想要的结果 - 但我通过设置导航按钮的文本属性来解决了这个问题:

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

然后,我只需要做以下操作,用户交互性和颜色变化就会自动完成:
navButton.enabled = YES; // or NO

1
我很喜欢我在发布解决方案一个月后遇到了这个问题,而我的解决方案回答了我的问题。 - Mike

1
尝试像这样做一些事情:

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

1
将其翻译为中文:

更新为:

self.navigationItem.leftBarButtonItem?.isEnabled = true

0
您可以尝试手动更改色调颜色,方法如下:
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor grayColor];

这是未经测试的代码,但它应该可以工作。另外,在重新启用时别忘了改回来。


应该是 [UIColor grayColor] - Nathan Donnellan

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