loadView
- ViewController의 뷰를 만드는 메서드
- UIViewController Lifecylce에 영향을 미치는 메서드이기 때문에 해당 메서드 사용 시 유의가 필요함
- ViewController는 View를 요청 시 View가 nil일 때 loadView 메서드를 호출하여 View를 로드함
- loadView 호출 시점에서 nib 파일이 있는 경우 해당 nib 파일을 호출함
- 스토리보드(Interface Builder: 마우스뷰를 그리는 경우)를 통해 뷰를 생성한 경우 이 메서드를 override하면 안됨
- Custom시 super 호출하지 않아야 함
- ViewController init에서 view를 갈아끼우는 경우 loadView가 호출되지 않음
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nil, bundle: nil)
// loadView 호출하지 않음
view = mainView
print("init")
}
// view가 nil일 시 호출
override func loadView() {
view = mainView
print("loadview")
}
- CustomView를 만들어 뷰를 수동으로 사용 시에 loadView 사용
- → 이때, addSubview를 하여 ViewController에 view를 추가해줄 수도 있지만, 추가적인 view가 존재하지 않는 경우 loadView에서 애당초 view를 CustomView로 갈아끼움
- → loadView는 View Lifecycle상 View를 만들어주는 타이밍이자, View가 메모리에 올라가지 않은 타이밍이기 때문에 이 메서드를 사용하여 CustomView를 ViewController에 직접 넣는 것
- → 코드로 UI 작성 시 View의 코드양이 방대해지는 경우 CustomView를 ViewController에서 분리
- loadView를 통해 View를 직접 갈아끼우는 경우 CustomView 자체에 대한 수동 Constraints 값은 의미가 없어짐
- → translatesAutoresizingMaskIntoConstraints = true
- → 이제 CustomView가 ViewController내의 최상위 뷰가 되기 때문에, NavigatoreController에 의해서 AutoResizing으로 Layout이 잡히게 되기 때문임
참고 링크
UIViewController의 View Replacing
728x90
'TIL' 카테고리의 다른 글
estimatedItemSize / itemSize (0) | 2023.11.30 |
---|---|
UIApplicationDelegate / UISceneDelegate (0) | 2023.11.24 |
Access Control 접근제어 (0) | 2023.11.13 |
MVC (0) | 2023.11.10 |
Architecture Pattern (0) | 2023.11.10 |