본문 바로가기

TIL

View 갈아끼우기

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

loadView() | Apple Developer Documentation

Outlets

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