source

UIButton: 선택된 강조 표시된 상태에 대한 이미지 설정

lovecheck 2023. 6. 11. 10:59
반응형

UIButton: 선택된 강조 표시된 상태에 대한 이미지 설정

버튼의 상태에 대한 이미지를 정상으로 설정했습니다.강조 표시 및 선택됨, 그러나 선택된 상태의 버튼을 누르거나 강조 표시하면 강조 표시된 이미지가 표시되지 않고 회색 사진만 표시됩니다.버튼을 선택하면 강조 표시된 상태의 이미지를 설정할 수 있습니까?

내 코드:

[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];

인터페이스 작성기에서 이 작업을 수행할 수 있습니다.

다음을 선택합니다.UIButton당신이 시작하기를 원하는IB그리고 나서 가.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];
}

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))

신속하게 다음 작업을 수행할 수 있습니다.

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

저의 경우 UI 버튼을 변경해야 합니다.입력 위치.custom에게

그리고:

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

탭핑을 처리할 때:

button.isSelected = !button.isSelected

제가 틀렸다면 고쳐주세요.함으로써

   [button setSelected:YES];

선택한 대로 단추의 상태를 명확하게 변경합니다.따라서 자연스럽게 당신이 제공한 코드에 의해 당신의 사례에서 선택된 상태에 대해 확인될 것입니다.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])

OR

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에게 있지만, 저는 완전한 작동 솔루션을 제공하면서 그것을 조금 개선했습니다.

사마린 C#

비트적 OR을 수행하는 것은 어떤 이유에서인지 작동하지 않습니다.

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);

선택한 상태에 대한 사용자 지정 버튼을 길게 누를 때 OS가 기본적으로 제공하는 강조 표시된 색조가 필요한 경우 이 UIButton 하위 클래스를 사용합니다.스위프트 5에서 작성:

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

언급URL : https://stackoverflow.com/questions/5592646/uibutton-set-image-for-selected-highlighted-state

반응형