[ios] @IBDesignable, @IBInspectable

Cobugi·2021년 9월 15일
0

ios

목록 보기
1/8

@IBInspectable

  • 이렇게 생긴 인스펙터에서 뷰, 라벨, 버튼 등 다양한 UI들의 상태를 변경할 수 있다
  • 하지만 인스펙터에 존재하지 않는 것들이 있는데
  • 이를 @IBInspectable로 인스펙터에서 설정하게 할 수 있다

예시

  • 버튼의 Radius를 둥글게 만들고 싶다
  • 하지만 이 설정은 인스펙터에 존재하지 않는다
/*
ButtonRadius.swift 파일을 하나 생성하고
UIButton을 상속받은 클래스를 만든다
*/

class ButtonRadius: UIButton {
    // 인스펙터에서 isRound라고 설정할 수 있는 공간이 생긴다
    @IBInspectable var isRound: Bool = false {
    	// 인스펙터에서 isRound의 값이 설정되었을 때
        didSet {
            // 만약 true이면
            if isRound {
            	// 버튼.layer.cornerRadius 은 버튼 높이의 절반으로 해줘
                self.layer.cornerRadius = self.frame.height / 2
            }
        }
    }
}
  • 이렇게 작성하고 변경하고 싶은 버튼의 클래스를 ButtonRadius로 지정해주면
  • 인스펙터에 다음과 같이 나온다

@IBDesignable

  • @IBInspectable로 만든 임의의 설정들을 적용해도 스토리보드에는 적용되지 않지만
  • 실행을 해서 보면 적용이 되어있는 것을 알 수 있다
  • 만들면서 확인할 수는 없는 것일까??
  • 스토리보드에서 실시간으로 볼 수 있게 해주는 것이 @IBDesignable이다

예시

/*
위의 예시와 동일한 코드에
@IBDesignable만 써주면 된다
*/

@IBDesignable
class ButtonRadius: UIButton {
    @IBInspectable var isRound: Bool = false {
        didSet {
            if isRound {
                self.layer.cornerRadius = self.frame.height / 2
            }
        }
    }
}

하지만

  • 나는 @IBDesignable을 써도 적용이 되지 않았다
  • 왜 안되는지 찾아봐야겠다

profile
iOS Developer 🐢

0개의 댓글