如何将 UIButton 设置为选中和禁用
How to set a UIButton as both Selected and Disabled
尝试在 UI 按钮上切换选中和启用属性,因此创建 4 种潜在状态(选中和禁用、选中和启用、未选中和禁用、未选中和启用)。
在 viewDidLoad 中,我定义了按钮状态的图像
- (void)viewDidLoad
{
[super viewDidLoad];
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:BLUE_IMAGE] forState:UIControlStateNormal];
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:GREY_IMAGE] forState:UIControlStateSelected];
}
在 viewWillAppear 中,我有条件地设置了 enabled 属性以及 属性(我们称之为 self.buttonShouldBeSelected),然后在其 [=28= 中设置 UIButton 的 selected 属性].连同 viewDidLoad
中的一些调试代码
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// default control states
self.inputToolbar.contentView.leftBarButtonItem.enabled = NO;
if (self.aBoolean) {
self.buttonShouldBeSelected = [self.aNSNumber boolValue];
}
}
- (void)setButtonShouldBeSelected:(BOOL)buttonShouldBeSelected
{
self.inputToolbar.contentView.leftBarButtonItem.selected = buttonShouldBeSelected;
_buttonShouldBeSelected = buttonShouldBeSelected;
}
- (void)viewDidAppear
{
NSLog(@"SELECTED: %u", self.inputToolbar.contentView.leftBarButtonItem.selected);
NSLog(@"ENABLED: %u", self.inputToolbar.contentView.leftBarButtonItem.enabled);
NSLog(@"STATE: %lu", self.inputToolbar.contentView.leftBarButtonItem.state);
}
除了一种情况,当按钮被禁用并处于选中状态时,这在所有情况下都有效。在这种情况下,UI 显示 BLUE_IMAGE 而不是所选状态的 GREY_IMAGE 并且按钮被正确禁用。
在这种情况下,日志结果为...
SELECTED: 1
ENABLED: 0
STATE: 6
我做错了什么,为什么显示 NormalState 的图像以及 UIControlState == 6 是什么意思?
[button setImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
您可以尝试将色调颜色设置为零吗?
[self.inputToolbar.contentView.leftBarButtonItem setTintColor:nil];
需要添加第三状态声明
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:GREY_IMAGE] forState:(UIControlStateDisabled | UIControlStateSelected)]
对于Swift:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), forState: [.Disabled, .Selected])
对于 Swift 3:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), for: [.disabled, .selected])
我遇到了同样的问题。我使用 属性 isUserInteractionEnabled 而不是 isEnabled,所以按钮可以保持之前的状态。
这就是组合状态对我在 Swift 中起作用的方式:
let state = UIControl.State.selected.union(UIControl.State.disabled)
button.setImage(image, for: state)
尝试在 UI 按钮上切换选中和启用属性,因此创建 4 种潜在状态(选中和禁用、选中和启用、未选中和禁用、未选中和启用)。
在 viewDidLoad 中,我定义了按钮状态的图像
- (void)viewDidLoad
{
[super viewDidLoad];
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:BLUE_IMAGE] forState:UIControlStateNormal];
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:GREY_IMAGE] forState:UIControlStateSelected];
}
在 viewWillAppear 中,我有条件地设置了 enabled 属性以及 属性(我们称之为 self.buttonShouldBeSelected),然后在其 [=28= 中设置 UIButton 的 selected 属性].连同 viewDidLoad
中的一些调试代码- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// default control states
self.inputToolbar.contentView.leftBarButtonItem.enabled = NO;
if (self.aBoolean) {
self.buttonShouldBeSelected = [self.aNSNumber boolValue];
}
}
- (void)setButtonShouldBeSelected:(BOOL)buttonShouldBeSelected
{
self.inputToolbar.contentView.leftBarButtonItem.selected = buttonShouldBeSelected;
_buttonShouldBeSelected = buttonShouldBeSelected;
}
- (void)viewDidAppear
{
NSLog(@"SELECTED: %u", self.inputToolbar.contentView.leftBarButtonItem.selected);
NSLog(@"ENABLED: %u", self.inputToolbar.contentView.leftBarButtonItem.enabled);
NSLog(@"STATE: %lu", self.inputToolbar.contentView.leftBarButtonItem.state);
}
除了一种情况,当按钮被禁用并处于选中状态时,这在所有情况下都有效。在这种情况下,UI 显示 BLUE_IMAGE 而不是所选状态的 GREY_IMAGE 并且按钮被正确禁用。
在这种情况下,日志结果为...
SELECTED: 1
ENABLED: 0
STATE: 6
我做错了什么,为什么显示 NormalState 的图像以及 UIControlState == 6 是什么意思?
[button setImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
您可以尝试将色调颜色设置为零吗?
[self.inputToolbar.contentView.leftBarButtonItem setTintColor:nil];
需要添加第三状态声明
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:GREY_IMAGE] forState:(UIControlStateDisabled | UIControlStateSelected)]
对于Swift:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), forState: [.Disabled, .Selected])
对于 Swift 3:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), for: [.disabled, .selected])
我遇到了同样的问题。我使用 属性 isUserInteractionEnabled 而不是 isEnabled,所以按钮可以保持之前的状态。
这就是组合状态对我在 Swift 中起作用的方式:
let state = UIControl.State.selected.union(UIControl.State.disabled)
button.setImage(image, for: state)