UIBarButtonItem已禁用,但颜色正常

时间:2015-03-20 11:48:10

标签: ios objective-c uibarbuttonitem

我遇到UIBarButtonItem的问题。我使用外观代理为状态NormalDisabled设置颜色,我在viewDidLoad的{​​{1}}方法中执行此操作。但是,该按钮会获得UIViewController颜色,即使它被禁用(并且由于未调用Normal方法而明确禁用它)。

问题与此text color of disabled uibarbuttonitem is always the color of the normal state类似,但此处发布的解决方案对我不起作用。

我的应用适用于iOS 8.2,我正在使用Xcode 6.2

有什么想法吗?

修改: 我不确定这是否有助于找到解决方案,但是当我使用IBAction而不是initWithImage:创建我的按钮时,一切似乎都运行良好。这可能是苹果公司的错误吗?

6 个答案:

答案 0 :(得分:25)

Swift 4

如果有人正在寻找如何改变barbuttonitem禁用状态的swift。你走了。

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.lightGray], for: .disabled)

答案 1 :(得分:6)

请查看以下code

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem * btnTemp = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(btnDone_Click:)];
    [btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor lightGrayColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:16.0f]} forState:UIControlStateNormal];

    [btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor], NSFontAttributeName:[UIFont systemFontOfSize:16.0f]} forState:UIControlStateDisabled];

    [self.navigationItem setRightBarButtonItem:btnTemp];

}

- (void)btnDone_Click : (id)sender {

    UIBarButtonItem * button = (UIBarButtonItem *)sender;
    [button setEnabled:FALSE];
    [self performSelector:@selector(enableButton:) withObject:sender afterDelay:2.0f];


}

- (void)enableButton : (id)sender {
    UIBarButtonItem * button = (UIBarButtonItem *)sender;
    [button setEnabled:TRUE];
}

答案 2 :(得分:5)

所以我终于设法让它正常工作,问题是我设置了两次UIBarButtonItems的颜色,一次使用[navBar setTintColor:]并使用外观代理。只留下外观代理解决了这个问题。

答案 3 :(得分:2)

您可能已为.Normal状态设置了条形按钮项标题文本属性,并且还需要将其设置为.Disabled状态。

有两种方法可以解决此问题,一种方法是在条形按钮项目实例上设置标题文本属性,另一种方法是使用外观代理。

单个实例:

saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)

外观代理:

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MyNavigationController.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)

答案 4 :(得分:1)

这会更新 Swift 4.0 的答案:

barButtonItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: UIControlState.disabled)

这显示了针对白色条禁用的橙色颜色的说明性示例.TintColor:

enter image description here

barTintColor = .white    
cancelButton.isEnabled = false
cancelButton.setTitleTextAttributes(
    [NSAttributedStringKey.foregroundColor: UIColor.orange], 
    for: UIControlState.disabled)

答案 5 :(得分:0)

在iOS版本10. *上运行时,这也是我的问题。设置按钮的前景色为我解决了这个问题。

self.saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.gray], for: UIControlState.disabled)