banner

서론

UiKit 를 공부하면서 햇갈리는 부분을 정리해보았습니다.

화면 전환

ViewController에서 새로운 ViewController로 push를 하기 위해서는 아래와 같이 사용합니다.

@IBAction func moveNext(_ sender: Any) {
    guard let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") else {
        return
    }

    // 네비게이션 컨트롤러를 통해 전체 화면으로 전환
    self.navigationController?.pushViewController(secondVC, animated: true)
}

다만, 이 경우에는 해당 ViewController가 NavigationController Embed 되어있어야 합니다. 만약 되어 있지 않으면 Modal 로 띄워야 합니다.

@IBAction func moveNext(_ sender: Any) {
    guard let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") else {
        return
    }

    secondVC.modalTransitionStyle = .coverVertical

    self.present(secondVC, animated: true)
}

여기서 modal은 전체 화면을 다 가리기 보다는 일부만 가리는 형태로 띄워집니다. 그리고 push 는 전체 화면을 가리는 형태로 띄워집니다.

모달 전체 화면
iShot_2024-08-19_21 16 41 iShot_2024-08-19_21 20 19

모달 방식은 다른 말로 Present 방식이라고도 합니다.

이전 화면으로 이동

그리고 push나 modal로 띄운 ViewController는 아래와 같이 back을 할 수 있습니다.

Push 된 ViewController back

self.navigationController?.popViewController(animated: true)
self.dismiss(animated: true)

내비게이션 컨트롤러는 뷰컨트롤러의 특별한 종류입니다. 내비게이션 컨트롤러는 뷰컨트롤러를 스택에 저장하고, 스택에 저장된 뷰컨트롤러를 관리한다. 그리고 앱 내비게이션을 표시해줄수 있는 내비게이션 바가 내장되어 있습니다.

내비게이션 컨트롤러는 뷰 컨트롤러의 계층적 구조를 관리하는 역할이기 때문에, 직접 컨텐츠를 담고 화면을 구성하지 않습니다. 대신 다른 뷰 컨트롤러를 포함하고 그 뷰 컨트롤러를 관리합니다.

Root View Controller

내비게이션 컨트롤러의 루트 뷰 컨트롤러는 내비게이션 컨트롤러의 스택에 추가된 첫 번째 뷰 컨트롤러입니다. 루트 뷰 컨트롤러는 내비게이션 컨트롤러가 표시하는 첫 번째 화면이 됩니다.

내비게이션 바는 내비게이션 컨트롤러의 뷰 계층 구조에 포함되어 있습니다. 아래 화면에 표시되는 뒤로가기 버튼 즉 내비게이션 바는 개발자가 직접 추가된 것이 아닌 내비게이션 컨트롤러가 자동으로 추가한 것입니다.

iShot_2024-08-19_21 48 48

댓글남기기