![](/img/trans.png)
[英]Create highlighted state background image programmatically for 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.