我知道self.navigationItem.rightBarButtonItem.enabled = NO
,但如何让UIBarButtonItem
显示已禁用,但实际检测用户何时点击它?我想这样做,以防我想提醒用户什么是不完整的。
答案 0 :(得分:1)
我这样做的方法并不是禁用它,但是当它“禁用”时,设置另一个条形按钮项目,其中具有禁用的背景,并且没有用于点击事件的替代图像。然后在点击它时,显示一个警报视图,告诉他们它不可用:
- (void)init
{
[self setDisabledBarButtonItem:[UIBarButtonItem alloc] initWith...];
[disabledBarButtonItem addTarget:......];
[self setEnabledBarButtonItem:[UIBarButtonItem alloc] initWith...];
[enabledBarButtonItem addTarget......];
}
- (void)timeToDisableBarButtonItem:(id)sender
{
[self.navigationitem setRightBarButtonItem:disabledBarButtonItem animated:NO];
}
- (void)timeToEnableBarButtonitem:(id)sender
{
[self.navigationitem setRightBarButtonItem:enabledBarButtonItem animated:NO];
}
良好的用户体验实践表明,您不应该告诉用户它已被禁用,他们应该能够在没有警报的情况下告诉您。说起来容易做起来当然:)
很想看到一个比这个更清洁的解决方案,但它是我认为你能让它发挥作用的唯一方式。
希望有所帮助:)
答案 1 :(得分:1)
我遇到了类似的问题,除了我试图启用禁用按钮外观。我找到了一个在iOS 5.0中可用的更好的解决方案 - 您可以使用setTitleTextAttributes:forState
来控制已启用(或在我的情况下,已禁用)状态以及许多其他状态的外观。
在大多数情况下,您不希望这样做。但是,就我而言,事实证明是必要的。我有一个工具栏按钮,它是一个文档标题,在编辑模式下按下它可以调出UITextField来编辑标题,但在运行模式下,标题不应该是可编辑的,同时仍然看起来像标题,而不是禁用按钮。通过更改文本颜色以匹配我的启用状态,我实现了我想要的外观和行为,而无需交换按钮或操作(因此必须将我的标题文本同步到三个地方而不是两个)。