본문 바로가기
iOS/흡구오디

[흡구오디] 내비게이션 컨트롤러 코드로 구현하기 | 화면 이동

by 23g 2025. 7. 16.

이번에는 코드로 내비게이션 컨트롤러를 구현해볼거예요

 

SceneDelegate 파일에 아래와 같이 코드를 입력해주면 됩니다.

// 파일 위치: SmokingAreaOdi/SceneDelegate.swift

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

  var window: UIWindow?   // 앱 화면을 담는 윈도우

  func scene(_ scene: UIScene,
             willConnectTo session: UISceneSession,
             options connectionOptions: UIScene.ConnectionOptions) {

    guard let windowScene = scene as? UIWindowScene else { return }

    // 메인 윈도우 생성
    let window = UIWindow(windowScene: windowScene)

    // 첫 화면으로 보여줄 뷰컨트롤러 인스턴스
    let rootVC = ViewController()

    // 네비게이션 컨트롤러 생성 후 루트로 지정
    let navController = UINavigationController(rootViewController: rootVC)

    // 네비게이션 바 전역 스타일 예시 (옵션)
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = .systemBackground
    navController.navigationBar.standardAppearance = appearance
    navController.navigationBar.scrollEdgeAppearance = appearance

    // 윈도우에 네비게이션 컨트롤러 적용
    window.rootViewController = navController
    self.window = window
    window.makeKeyAndVisible()
  }
}

버튼 클릭 등 이벤트 시 화면 이동은 이렇게 하면 됩니다.

// 새로운 화면으로 이동할 때
let detailVC = DetailViewController()
navigationController?.pushViewController(detailVC, animated: true)

// 뒤로 돌아갈 때
navigationController?.popViewController(animated: true)

그리고 알게 된 점!

NavigationItem은 뷰컨 소속이라 내가 따로 만들어놓은 MainView(UI 설정 파일)에서는 설정 불가!

 

내비아이템에 소속되어있는 타이틀 등은 뷰컨에서 설정을 해줘야한다

override func viewDidLoad() {
    super.viewDidLoad()
    mainView.addButton.addTarget(self, action: #selector(didTapAddButton), for: .touchUpInside)
    //이렇게
    self.navigationItem.title = "Home"
  }

 

그럼 이렇게 내비게이션 바가 뜨고

초록 + 버튼을 누르면 다음 화면으로 넘어간답니다~!

 

왜이렇게 느린지는 아직 모름...쩝