使UIBarButtonItem显示为禁用?

时间:2011-10-17 05:35:28

标签: ios uibarbuttonitem

我知道self.navigationItem.rightBarButtonItem.enabled = NO,但如何让UIBarButtonItem 显示已禁用,但实际检测用户何时点击它?我想这样做,以防我想提醒用户什么是不完整的。

2 个答案:

答案 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来控制已启用(或在我的情况下,已禁用)状态以及许多其他状态的外观。

API参考: https://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIBarItem_Class/Reference/Reference.html#//apple_ref/occ/instm/UIBarItem/setTitleTextAttributes:forState

在大多数情况下,您不希望这样做。但是,就我而言,事实证明是必要的。我有一个工具栏按钮,它是一个文档标题,在编辑模式下按下它可以调出UITextField来编辑标题,但在运行模式下,标题不应该是可编辑的,同时仍然看起来像标题,而不是禁用按钮。通过更改文本颜色以匹配我的启用状态,我实现了我想要的外观和行为,而无需交换按钮或操作(因此必须将我的标题文本同步到三个地方而不是两个)。