【发布时间】:2015-03-12 03:27:12
【问题描述】:
尝试同时切换 UIButton 上的 selected 和 enabled 属性,因此创建 4 种潜在状态(Selected & Disabled、Selected & Enabled、Unselected & Disabled、unselected & Enabled)。
在 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),然后在其设置器中设置 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 是什么意思?
【问题讨论】:
-
尝试将 UIControlStateSelected 替换为 (UIControlStateHighlighted|UIControlStateSelected)
-
添加 UIControlStateHighlighted 没有变化
-
谢谢 Josh ...虽然您的解决方案并不完全正确,但它让我想到了正确的道路。我添加了第三个 setImage: forState:,为 (UIControlStateDisabled | UIControlStateSelected) 设置 GREY_IMAGE。
标签: ios objective-c uibutton uicontrol uicontrolstate