광어네 맛집

[Objective C]UIButton BackgroundColor 본문

Objective-C [레거시 뿌수기!]/Objective-C

[Objective C]UIButton BackgroundColor

Lautner Jacob 2022. 4. 21. 12:47
728x90
반응형

요즘 날씨가 오락가락하는데 옷 입기가 애매함

아무튼 요즘은 출시 앱하나 만들까 하는데 Swift로 해야하나 SwiftUI로 해야하나 고민이긴 함 ㅜ

 

 

아무튼 이번 포스팅은 UIButton BackgroundColor에 대해서 적어볼까 함!

상황은 UIButton을 CustomButton으로 만들꺼임

참고로 Designable 써서 스토리보드에 보이게 만들거임

 


 

먼저 헤더 파일에 아래처럼 선언합니다

#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface Button: UIButton
@property (nonatomic, strong) IBInspectable UIColor *enableBackgroundColor;
@property (nonatomic, strong) IBInspectable UIColor *enableTintColor;
@end

 

이후 메인 파일에서는 아래처럼 해줌!

Extension 에는 이렇게 선언해주는데 이유는 조금이따가 말해줌!

@interface Button ()
@property (nonatomic, strong) UIColor *normalBackgroundColor;
@property (nonatomic, strong) UIColor *normalTextColor;
@end

 

Awakefromnib 을 선언해서

구현하고 싶은 메소드를 넣어주면 됩니다!

( 상황에 맞게 draw rect 등등 넣어주시면 됨!)

 

대충 이런 느낌으로 넣어주면 됨!

아래 코드는 왜 넣어주냐면 스토리 보드에서 기본으로 설정해주는 부분 있잖음

그게 self.background로 들어가나 봄;;;

그것도 모르고 헤더에서 backgroundColor라고 이름 지었다가 얘가 알아듣지 못함...에러라도 떠주지

self.normalTextColor = self.titleLabel.textColor;
self.normalBackgroundColor = self.backgroundColor;

 

 

그리고 신기한게 헤더에 선언한 프로퍼티를 함수로 쓰려고 보니까

'set' 붙이니까 자동완성됨 ㅋㅋㅋㅋㅋㅋ

Obejctive C도 조금 편하게 자동완성되구나?

- (void)setEnableBackgroundColor:(UIColor *)enableBackgroundColor {
  _enableBackgroundColor = enableBackgroundColor;
  [self setNeedDisplay];
}

- (void)setEnableTextColor:(UIColor *)enableTextColor {
  _enableTextColor = enableTextColor;
  [self setNeedDisplay];
}

위에 처럼 스토리보드에서 받은 값을 저장해두는 거임

 

그럼 받기만 하면 어째 받은 걸 상태에 따라서 바꿔야함

이것도 마찬가지로 'set'쓰면 enable 나와서 적을 수 있음!

(정확히 기억이 안나는데 아래처럼 true, false 나눠서 적어주면 됩니다!)

( 물론 옆에 파라메터가 있음  /  지금 기억 더듬어서 적는거라 ㅎㅎ..)

- (void) setEnable {
  if (true) {
    [self setBackgroundColor: self.normalBackgroundColor];
    // textColor도 마찬가지!
  } else {
    [self setBackgroundColor: _enableBackgroundColor];
    // textColor도 마찬가지!
  }
}

 

그럼 Custom은 다 만든거임!!

 


 

사용할 때는 어떻게 하냐면 스토리 보드에서 보면 이렇게 나올 거임!!

 

 

스토리보드에서 ViewController에 연결하고!

@property (weak, nonatomic) IBOutlet Button *myButton;

 

addTarget 설정해주면 됨!

상황에 맞게 쓰면 되지만

아래는 인스타 '좋아요' 버튼 처럼 쓸 수 있음!

- (void)clickedAction:(Button *)sender {
  _myButton.enabled = sender.selected;
  sender.selected = !sender.selected;
}

 

sender.selected가 프린트해보면 0 , 1 반복되는 걸 알 수 있음!

 


 

적다보니 길어졌는데 다음에는 

self 랑 _ (언더바)차이에 대해서 적어야겠음 ㅋㅋㅋㅋ

 

아 맞다

 이 오류도 발견하긴 했는데 아래처럼 바꿔주면 없어짐!

근데 BuildSetting에서 설정해주면 오류 안나오긴

하지만 self 쓰는게 strong에서 weak로 바꿔주는 거 같음! (이건 부정확하지만 ㅜ)

 

_backgroundColor

self -> _backgroundColor

 

아무튼 오늘도 화이팅!!

728x90
반응형