오늘은 UIView를 사용할 때 매번 작성하던 initializer에 대해 알아볼 거예요.
항상 UIView를 상속한 class 내부에 아래 그림의 initializer를 작성하고 그곳에서 UI를 설정했는데요.
왜 이러한 initializer를 작성해야 하는지 궁금해져서 알아보려고 해요.
먼저 UIView의 공식문서를 확인해보면 두가지의 initializer가 정의되어 있어요.
하나씩 살펴볼게요.
이 생성자는 코드로 뷰를 만들때 호출됩니다. 코드로 추가한 view에 속성을 적용하기 위해서는 init(frame:)
에 속성을 지정해줘야합니다.
override init(frame: CGRect){
super.init(frame: frame)
// UI 설정
configureUI()
}
private func configureUI(){
self.addSubview(backgroundView)
backgroundView.backgroundColor = .blue
}
이 생성자는 스토리보드로 뷰를 만들때 호출됩니다. 인터페이스빌더에서 custom 클래스로 지정한 뷰는 required init?(coder aDecoder:)가 호출됩니다.
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
결과적으로 UIView를 쓰면 위의 생성자 두개를 모두 작성하고 스토리보드를 사용하면 init?(coder: NSCoder)
에서 UI를 설정하고 코드로 뷰를 작성할시에는 init(frame: CGRect)
에서 UI를 설정하자.