// Push
func pushView() {
// 다음 들어갈 View 입력
let nextView = nextViewController()
self.navigationController?.pushViewController(nextView, animated: true)
}
// Pop
func popView() {
self.navigationController?.popViewController(animated: true)
}

Navigation Bar, Navigation Item: 최상위 View Controller에 따라 Navigation Bar의 내용이 동적으로 변경됩니다.
주의할점
UINavigationController
// SceneDelegate 부분
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
//UINavigationController를 Base로 갖는 Scene 생성
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.backgroundColor = .systemBackground
// window의 rootViewController 지정
window?.rootViewController = UINavigationController(rootViewController: ViewController())
// key로 만드는 이유?? -> 윈도우 자체를 키로 설정하고 - 메인 윈도우로 지정
window?.makeKeyAndVisible()
}
위 코드는 Scene Delegate에서 앱이 시작될 때 초기화되는 윈도우와 루트 뷰 컨트롤러를 설정하는 부분입니다. `UINavigationController`를 루트로 설정하는 이유는 일반적으로 앱의 탐색 구조를 담당하며, 초기 화면을 `ViewController()`로 설정하여 화면에 표시합니다. 이러한 초기화 코드를 통해 앱이 실행될 때 적절한 화면 구조와 초기 화면이 구성될 수 있도록 합니다.
// 각각 뷰 컨트롤 방식
// present (View Controller)
@objc func showPresent() {
let nextViewController = NextViewController()
self.present(nextViewController, animated: true)
}
// push (Navigation Controller)
@objc func showPush() {
let nextViewController = NextViewController()
// viewController에 추가하고 navigation bar 해당 view에 맞게 바꿔줌
navigationController?.pushViewController(nextViewController, animated: true)
}
// 각각 뷰 종료 방식
// present (View Controller)
func dismissViewController() {
self.dismiss(animated: true)
}
// Navigation Controller
func popViewController() {
self.navigationController?.popViewController(animated: true)
}
// 출력 뷰
class NextViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemGray3
}
}
![]() | ![]() | ![]() |
|---|
→ NavigationController -순차적으로 작업이 필요한 부분에서
→ present - 단순 표시 (팝업성)