비활성화된 UIButton 색이 바랜다거나 회색이 아님
제 아이폰 앱에는 인터페이스 빌더에 만든 UI 버튼이 있습니다.내 코드에서 이렇게 활성화하고 비활성화할 수 있습니다...
sendButton.enabled = YES;
또는
sendButton.enabled = NO;
하지만, 버튼의 시각적인 모양은 항상 같습니다!색이 바래거나 회색이 아닙니다.하지만 클릭을 시도하면 예상대로 활성화 또는 비활성화됩니다.내가 뭘 빼놓았나요?색이 바래거나 회색으로 보여야 하지 않나요?
다음 코드를 사용할 수 있습니다.
sendButton.enabled = YES;
sendButton.alpha = 1.0;
or
sendButton.enabled = NO;
sendButton.alpha = 0.5;
상태 구성을 비활성화하고 원하는 것을 선택하도록 변경하기만 하면 됩니다. 비활성화 상태의 배경 이미지
다른 옵션은 비활성화 상태의 텍스트 색상(예: 밝은 회색)을 변경하는 것입니다.
에서 스리보드편서에다선음다택니합을집기를 선택합니다.Disabled
State Config
팝업 버튼.사용Text Color
팝업 단추를 눌러 텍스트 색을 변경합니다.
코드에서는 다음을 사용합니다.-setTitleColor:forState:
메세지.
비활성화 시 버튼이 희미해지도록 하려면 알파를 설정합니다.두 가지 옵션이 있습니다.
첫 번째 방법:만약 당신이 당신의 앱의 모든 버튼을 신청하고 싶다면, 당신은 쓸 수 있습니다.extension
다음과 같은 UIButton의 경우:
extension UIButton {
open override var isEnabled: Bool{
didSet {
alpha = isEnabled ? 1.0 : 0.5
}
}
}
두 번째 방법:앱에서 일부 버튼만 신청하고 싶다면 아래와 같이 UIButton에서 사용자 지정 클래스를 작성하고 적용할 클래스를 사용할 수 있습니다.
class MyButton: UIButton {
override var isEnabled: Bool {
didSet {
alpha = isEnabled ? 1.0 : 0.5
}
}
}
다음에 대한 다른 이미지를 설정합니다.UIControlStateDisabled
이미지)및 (비활성화된 회색 이미지) »UIControlStateNormal
(정상 영상) 버튼을 누르면 비활성화 상태가 생성됩니다.
텍스트 버튼을 사용하는 경우 viewDidLoad 인스턴스 메서드를 사용할 수 있습니다.
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state
예:
[self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
사용할 수 있습니다.adjustsImageWhenDisabled
의 UIButton
(@property (nonatomic) BOOL adjustsImageWhenDisabled)
예:
Button.adjustsImageWhenDisabled = false
트title color
다양한 상태:
@IBOutlet weak var loginButton: UIButton! {
didSet {
loginButton.setTitleColor(UIColor.init(white: 1, alpha: 0.3), for: .disabled)
loginButton.setTitleColor(UIColor.init(white: 1, alpha: 1), for: .normal)
}
}
용도: (텍스트 색상이 자동으로 변경됨)
loginButton.isEnabled = false
이것은 꽤 오래된 질문이지만 이것을 달성하는 방법은 매우 간단합니다.
myButton.userInteractionEnabled = false
이렇게 하면 버튼의 모양을 변경하지 않고 터치 제스처만 비활성화됩니다.
스위프트 4+
extension UIButton {
override open var isEnabled: Bool {
didSet {
if self.isEnabled {
self.alpha = 1.0
}
else {
self.alpha = 0.5
}
//make sure button is updated
self.layoutIfNeeded()
}
}
}
사용방법
myButton.isEnabled = false
Swift에서:
previousCustomButton.enabled = false
previousCustomButton.alpha = 0.5
또는
nextCustomButton.enabled = true
nextCustomButton.alpha = 1.0
각 버튼이 아닌 Swift > 3.0으로 확장 생성
extension UIButton {
override open var isEnabled : Bool {
willSet{
if newValue == false {
self.setTitleColor(UIColor.gray, for: UIControlState.disabled)
}
}
}
}
두 개의 첫 번째 답변을 모두 사용할 수 있으며 더 나은 결과가 될 것입니다.
특성 검사기(버튼을 선택하는 경우)에서 상태 구성을 사용 안 함으로 변경하여 사용 안 함으로 설정할 때 표시될 새 이미지를 사용 안 함으로 설정합니다(내용->사용 가능 확인에서 마커를 제거하여 사용 안 함으로 설정).
상태를 활성화로 변경하면 이미지가 이 상태에서 로드됩니다.
여기에 알파 논리를 추가하는 것은 좋은 세부 사항입니다.
다음 코드가 잘 작동하는 것 같습니다.하지만 어떤 경우에는, 이것이 작동하지 않습니다.
sendButton.enabled = NO;
sendButton.alpha = 0.5;
위 코드가 작동하지 않으면 메인 스레드로 포장해주세요.그렇게
dispatch_async(dispatch_get_main_queue(), ^{
sendButton.enabled = NO;
sendButton.alpha = 0.5
});
만약 당신이 swift로 간다면, 이렇게.
DispatchQueue.main.async {
sendButton.isEnabled = false
sendButton.alpha = 0.5
}
또한, 여기에 UIButton 확장 기능을 작성합니다.
extension UIButton {
func enable() {
DispatchQueue.main.async {
self.isEnabled = true
self.alpha = 1.0
}
}
func disable() {
DispatchQueue.main.async {
self.isEnabled = false
self.alpha = 0.5
}
}
}
감사합니다. 코딩을 즐겨보세요!!!
저는 같은 문제에 갇혀 있습니다.알파 설정은 제가 원하는 것이 아닙니다.
UIButton
에는 "배경 이미지" 및 "배경 색상"이 있습니다.이미지의 경우,UIButton
로의 속성을 가지고 있습니다.
@property (nonatomic) BOOL adjustsImageWhenDisabled
그리고 버튼이 비활성화되면 배경 이미지가 더 밝게 그려집니다.배경색은 라빈의 솔루션인 알파 설정이 잘 됩니다.
먼저 Utilities-Attributes에서 "Disabled adjusted image" 상자를 선택하지 않았는지 확인해야 합니다.
그런 다음, 이 버튼의 배경색을 확인합니다.
(도움이 되길 바랍니다.이전 게시물입니다. Xcode에서 상황이 변경되었을 수 있습니다.
만약에UIButton
의 결합 상태입니다.selected
그리고.disabled
그 상태는UIControlStateSelected | UIControlStateDisabled
.
따라서 상태는 다음과 같이 조정되어야 합니다.
[button setTitleColor:color UIControlStateSelected | UIControlStateDisabled];
[button setImage:image forState:UIControlStateSelected | UIControlStateDisabled];
한 가지 접근법은 하위 클래스에 대한 것입니다.UIButton
다음과 같이:
@implementation TTButton
- (void)awakeFromNib {
[super awakeFromNib];
//! Fix behavior when `disabled && selected`
//! Load settings in `xib` or `storyboard`, and apply it again.
UIColor *color = [self titleColorForState:UIControlStateDisabled];
[self setTitleColor:color forState:UIControlStateDisabled];
UIImage *img = [self imageForState:UIControlStateDisabled];
[self setImage:img forState:UIControlStateDisabled];
}
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
[super setTitleColor:color forState:state];
//
if (UIControlStateDisabled == state) {
[super setTitleColor:color forState:UIControlStateSelected | state];
[super setTitleColor:color forState:UIControlStateHighlighted | state];
}
}
- (void)setImage:(UIImage *)image forState:(UIControlState)state {
[super setImage:image forState:state];
if (UIControlStateDisabled == state) {
[super setImage:image forState:UIControlStateSelected | state];
[super setImage:image forState:UIControlStateHighlighted | state];
}
}
@end
버튼을 하위 분류하고 isEnabled 변수를 재정의할 수 있습니다.장점은 여러 곳에서 재사용할 수 있다는 것입니다.
override var isEnabled: Bool {
didSet {
if isEnabled {
self.alpha = 1
} else {
self.alpha = 0.2
}
}
}
이 질문에는 많은 답이 있지만 backgroundColor를 사용하여 단추의 스타일을 지정하려는 경우에는 모두 유용하지 않습니다.UIButton에는 다양한 제어 상태에 대해 서로 다른 영상을 설정할 수 있는 좋은 옵션이 있지만 배경색에는 동일한 기능이 없습니다.그래서 해결책 중 하나는 색에서 이미지를 생성하고 버튼에 적용하는 확장 기능을 추가하는 것입니다.
extension UIButton {
private func image(withColor color: UIColor) -> UIImage? {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func setBackgroundColor(_ color: UIColor, for state: UIControlState) {
self.setBackgroundImage(image(withColor: color), for: state)
}
}
이 솔루션에는 단 한 가지 문제가 있습니다. 이 변경 사항은 스토리보드에 작성된 단추에는 적용되지 않습니다.저는 코드에서 UI를 스타일링하는 것을 선호하기 때문에 문제가 되지 않습니다.스토리보드를 사용하려면 추가 마법을 사용합니다.@IBInspectable
필요했다.
두 번째 옵션은 하위 분류이지만 저는 이것을 피하고 싶습니다.
#import "UIButton+My.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIButton (My)
-(void)fade :(BOOL)enable{
self.enabled=enable;//
self.alpha=enable?1.0:0.5;
}
@end
.h:
#import <UIKit/UIKit.h>
@interface UIButton (My)
-(void)fade :(BOOL)enable;
@end
언급URL : https://stackoverflow.com/questions/5715092/disabled-uibutton-not-faded-or-grey
'programing' 카테고리의 다른 글
해시에 특정 키가 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.31 |
---|---|
UI 레이블 - Wordwrap 텍스트 (0) | 2023.05.31 |
Postgre의 모든 테이블을 삭제하려면 어떻게 해야 합니까?SQL 데이터베이스? (0) | 2023.05.31 |
목록의 모든 항목을 플로트로 변환하려면 어떻게 해야 합니까? (0) | 2023.05.31 |
새 azure 포털(미리 보기)에서 VM에 새 엔드포인트를 추가하는 방법은 무엇입니까? (0) | 2023.05.31 |