我遇到UIBarButtonItem
的问题。我使用外观代理为状态Normal
和Disabled
设置颜色,我在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:
创建我的按钮时,一切似乎都运行良好。这可能是苹果公司的错误吗?
答案 0 :(得分:25)
如果有人正在寻找如何改变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:
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)