簡體   English   中英

UIButton:為選中高亮狀態設置圖像

[英]UIButton: set image for selected-highlighted state

我為按鈕的狀態 Normal、Highlighted 和 Selected 設置了一個圖像,但是當按鈕處於選中狀態並且我按下/突出顯示它時,我沒有看到我的突出顯示圖像,而只是灰色圖片。 是否可以在選擇按鈕時為突出顯示狀態設置圖像?

我的代碼:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

當我做:

[button setSelected:YES];

然后按下按鈕,“pressed.png”圖像不會被選中。

我找到了解決方案:需要添加附加行

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

您可以在界面生成器中執行此操作。

選擇您希望在IB中設置的UIButton ,然后轉到attributes inspector器。

在屏幕截圖中,我使用的是自定義按鈕類型,但這並不重要。

自定義默認

在此處輸入圖像描述

在此處輸入圖像描述

斯威夫特 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

要設置背景圖像,我們可以使用setBackgroundImage(_:for:)

斯威夫特 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])

我認為這里的大多數海報完全沒有抓住要點。 我有同樣的問題。 最初的問題是關於選定按鈕的突出顯示狀態(組合兩種狀態),它無法在 IB 中設置,並且會隨着一些變暗而退回到默認狀態。 只有一篇文章提到的有效解決方案:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

如果你有充分的理由這樣做,這就可以了

添加這些目標:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}

在迅速你可以做:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))

在 Swift 3.x 中,您可以通過以下方式在選擇按鈕時設置高亮圖像:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))

就我而言,我必須將 UIButton.Type 從.custom更改為.system

和:

button.setImage(UIImage(named: "unchecked"), for: .normal)
button.setImage(UIImage(named: "checked"), for: [.selected, .highlighted])

處理攻絲時:

button.isSelected =.button.isSelected

如果我錯了,請糾正我。 通過做

   [button setSelected:YES];

您顯然正在更改所選按鈕的狀態。 所以很自然地,通過你提供的代碼,圖像將在你的案例中選擇狀態 checked.png

如果有人想知道這在 Swift 中是如何工作的,這是我的解決方案:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)

斯威夫特 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

要么

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

表示該按鈕當前處於selected狀態,然后觸摸它,顯示highlight狀態。

我在設置imageView.highlighted = NO; (設置YES正常工作並且圖像更改為突出顯示的圖像)。

解決方案是調用[imageView setHighlighted:NO];

一切正常。

你想從哪里打電話

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

方法:

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

以上歸功於 Jorge,但我對其進行了一些改進,提供了完整的工作解決方案

Xamarin C#

由於某種原因,按位或不起作用

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

以下作品

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);

如果您還需要在點擊並按住所選狀態的自定義按鈕時操作系統默認提供的突出顯示色調,請使用此 UIButton 子類。 用 Swift 5 編寫:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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