이 포스트는 부스트코스의 iOS 강의를 학습 후 정리한 내용입니다


UINavigation Controller 클래스

  • 내비게이션 컨트롤러의 생성

    • 내비게이션 컨트롤러의 인스턴스를 생성하는 메서드

    • 매개변수로 내비게이션 스택의 가장 아래에 있는 루트 뷰 컨트롤러가 될 뷰 컨트롤러를 넘겨준다

init(rootViewController: UIViewController)
  • 내비게이션 스택의 뷰 컨트롤러에 대한 접근

    • var topViewController = 내비게이션 스택에 있는 최상위 뷰 컨트롤러에 접근하기 위한 프로퍼티

    • var visibleViewController = 현재 내비게이션 인터페이스에서 보이는 뷰와 관련된 뷰 컨트롤러에 접근하기 위한 프로퍼티

    • var viewController = 내비게이션 스택에 특정 뷰 컨트롤러에 접근하기 위한 프로퍼티, 루트 뷰 컨트롤러의 인덱스는 0 이다.

var topViewController: UIViewController?

var visibleViewController: UIViewController?

var viewController: [UIViewContorller]
  • 내비게이션 스택의 푸시(push)와 팝(pop)에 관한 메서드

    • func pushViewController(UIViewController, animated: Bool)

      • 내비게이션 스택에 뷰 컨트롤러를 푸시(push)한다

      • 푸시 된 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 표시된다

    • func popViewController(animated: Bool) -> UIViewController?

      • 내비게이션 스택에 있는 최상위 뷰 컨트롤러를 팝(pop)한다

      • 최상위 뷰 컨트롤러 아래에 있던 뷰 컨트롤러 아래에 있던 뷰 컨트롤러의 콘텐츠가 화면에 표시된다

    • func popToRootViewController(animated: Bool) -> [UIViewController]?

      • 내비게이션 스택에서 루트 뷰 컨트롤러를 제외한 모든 뷰 컨트롤러를 팝(pop)한다

      • 루트 뷰 컨트롤러가 최상위 뷰 컨트롤러가 된다

      • 삭제된 모든 뷰 컨트롤러의 배열이 반환된다

    • func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]?

      • 특정 뷰 컨트롤러가 내비게이션 스택에 최상위 뷰 컨트롤러가 되기 전까지 상위에 있는 뷰 컨트롤러들을 팝(pop)한다
func pushViewController(UIViewController, animated: Bool)

func popViewController(animated: Bool) -> UIViewController?

func popToRootViewController(animated: Bool) -> [UIViewController]?

func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]?

내비게이션 인터페이스를 구성하는 두 가지 방법

  • [1] 스토리보드를 사용하여 내비게이션 인터페이스 구성하기

    • 1) 스토리보드에서 내비게이션 컨트롤러에 포함할 뷰 컨트롤러를 선택한다

    • 2) 메뉴에서 [Editor] - [Embed In] - [Navigation Controller]를 차례로 선택한다

    • 3) 선택한 뷰 컨트롤러가 내비게이션 컨트롤러의 루트 뷰 컨트롤러가 되면서 내비게이션 컨트롤러가 생성된다

    • 위 방법 외에도 객체 라이브러리에서 내비게이션 컨트롤러를 드래그 엔 드랍 해서 캔버스에 올릴 경우 테이블 뷰를 포함한 루트 뷰 컨트롤러가 생성되면서 내비게이션 컨트롤러가 만들어진다.

  • [2] 코드작성을 통해 내비게이션 인터페이스 구성하기

    • 코드로 내비게이션 컨트롤러를 생성할 경우, 내비게이션 컨트롤러가 생성되기 원하는 적절한 지검에 내비게이션 컨트롤러를 생성할 수 있다

      • 예를 들어 내비게이션 컨트롤러가 애플리케이션 윈도우(Window)의 루트 뷰로서 역활을 한다면, 내비게이션 컨트롤러를 applicationDidFinishLaunching: 메서드에 구현할 수 있다.
    • 1) 루트 뷰 컨트롤러가 될 뷰 컨트롤러를 생성한다, 이 객체는 처음에 내비게이션 스택의 최상위 뷰 컨트롤러가 화면에 보이게 되고 내비게이션 바에 뒤로가기 버튼이 생성되지 않는다.

    • 2) init(rootViewController: UIViewController) 메서드를 통해 내비게이션 컨트롤러를 초기화하고 생성한다

    • 3) 내비게이션 컨트롤러를 윈도우의 루트 뷰 컨트롤러로 설정한다

func application(_ appication: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Override point for customization after application launch.
    
    // 루트 뷰 컨트롤러가 될 뷰 컨트롤러를 생성
    let rootViewController = UIViewController()
    
    // 위에서 생성한 뷰 컨트롤러로 내비게이션 컨트롤러를 생성
    let navigationController = UINavigationController(rootViewController: rootViewController)
    
    self.window = UIWindow(frame: UIScreen.main.bounds)
    
    // 윈도우의 루트 뷰 컨트롤러로 내비게이션 컨트롤러를 설정한다
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()
    
    return true
}

내비게이션 바의 구성

  • 내비게이션 바는 내비게이션 컨트롤러에 의해 생성된다

  • 내비게이션 바는 내비게이션 컨트롤러의 관리를 받는 모든 뷰 컨트롤러의 상단에 표시된다

  • 최상위 뷰 컨트롤러가 변경될 때마다 내비게이션 컨츠롤러는 내비게이션 바를 업데이트 한다.

navigationBar_1

  • 내비게이션 바는 다음과 같은 구조로 이루어져 있다

    • 내비게이션 바는 내비게이션 인터페이스에서 상단에 표시된다

    • 내비게이션 바는 내비게이션 아이템을 가질 수 있다

    • 뷰 컨트롤러가 전환될 때마다 내비게이션 바의 컨텐츠들이(내비게이션 아이템) 바뀌지만 내비게이션 바 자체는 내비게이션 컨트롤러가 관리하는 하나의 공통 객체이다

    • 내비게이션 바의 타이틀을 통해 현재의 위치(최상위 뷰 컨트롤러)를 알 수 있다.

navigationBar_2