簡體   English   中英

如何將 UIButton 設置為選中和禁用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM