[英]How to set a UIButton as both Selected and Disabled
試圖在 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 是什么意思?
需要添加第三個狀態聲明
[self.inputToolbar.contentView.leftBarButtonItem setImage:[UIImage imageNamed:GREY_IMAGE] forState:(UIControlStateDisabled | UIControlStateSelected)]
對於 Swift 3:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), for: [.disabled, .selected])
我遇到了同樣的問題。 我使用屬性isUserInteractionEnabled而不是isEnabled ,因此按鈕可以保持之前的狀態。
對於斯威夫特:
inputToolbar.contentView.leftBarButtonItem.setImage(UIImage(named: GREY_IMAGE), forState: [.Disabled, .Selected])
[button setImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
您可以嘗試將色調顏色設置為 nil 嗎?
[self.inputToolbar.contentView.leftBarButtonItem setTintColor:nil];
這就是我在 Swift 中組合狀態的方式:
let state = UIControl.State.selected.union(UIControl.State.disabled)
button.setImage(image, for: state)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.