Navigation 구조

E_H·2021년 7월 5일
0

iOS 구조

목록 보기
1/1

부스트코스의 네비게이션 인터페이스란? 을 보고 정리한 글입니다.

네비게이션 인터페이스란?

iOS에서 네비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는
드릴 다운 인터페이스(drill-down interface)이다.

드릴 다운 인터페이스란 아래 그림과 같이 각 선택할 수 있는 항목에 대한
세부항목이 존재하는 인터페이스

네비게이션 컨트롤러

네비게이션 컨트롤러는 컨테이너 뷰 컨트롤러로써 (Container View Controller) 네비게이션 스택을 사용하여 다른 뷰 컨트롤러를 관리한다.

네비게이션 컨트롤러는 두 개의 뷰를 화면에 표시할 수 있으며
네비게이션 스택뷰에 포함된 콘텐츠 뷰 컨트롤러의 콘텐츠를 나타내는 뷰와
네비게이션 컨트롤러가 직접 관리하는 뷰 (툴바)가 있다.

네비게이션 스택

네비게이션 스택은 뷰 컨트롤러를 담을 수 있는 배열과 같다.
스택의 가장 하위에 있는 (가장 먼저 스택에 추가된) 뷰 컨트롤러는 네비게이션 컨트롤러의 루트 뷰 컨트롤러가 되며 루트 뷰 컨트롤러는 pop되지 않는다.
네비게이션 스택의 가장 상위에 있는 (마지막에 푸시된) 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 나타나게 된다.

네베게이션 스택에서의 화면이동

내비게이션 스택의 푸시(push)와 팝(pop)

push

pop

UINavigationController 클래스

// 내비게이션 컨트롤러의 인스턴스를 생성하는 메서드입니다.
// 매개변수로 내비게이션 스택의 가장 아래에 있는 루트 뷰 컨트롤러가 될 뷰 컨트롤러를 넘겨줍니다.
init(rootViewController: UIViewController)

// 내비게이션 스택에 있는 최상위 뷰 컨트롤러에 접근하기 위한 프로퍼티입니다.
var topViewController: UIViewController?

// 현재 내비게이션 인터페이스에서 보이는 뷰와 관련된 뷰 컨트롤러에 접근하기 위한 프로퍼티입니다.
var visibleViewController: UIViewController?

// 내비게이션 스택에 특정 뷰 컨트롤러에 접근하기 위한 프로퍼티입니다.(루트 뷰 컨트롤러의 인덱스는 0 입니다.)
var viewController: [UIViewController]

// 내비게이션 스택에 뷰 컨트롤러를 푸시합니다.
// 푸시 된 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 표시됩니다.
func pushViewController(UIViewController, animated: Bool)

// 내비게이션 스택에 있는 최상위 뷰 컨트롤러를 팝합니다.
// 최상위 뷰 컨트롤러 아래에 있던 뷰 컨트롤러의 콘텐츠가 화면에 표시됩니다.
func popViewController(animated: Bool) -> UIViewController?

// 내비게이션 스택에서 루트 뷰 컨트롤러를 제외한 모든 뷰 컨트롤러를 팝합니다.
// 루트 뷰 컨트롤러가 최상위 뷰 컨트롤러가 됩니다.
// 삭제된 모든 뷰 컨트롤러의 배열이 반환됩니다.
func popToRootViewController(animated: Bool) -> [UIViewController]?

// 특정 뷰 컨트롤러가 내비게이션 스택에 최상위 뷰 컨트롤러가 되기 전까지 상위에 있는 뷰 컨트롤러들을 팝합니다.
func popToViewController(_ viewController: UIViewController, 
		animated: Bool) -> [UIViewController]?

코드 작성을 통해 네비게이션 인터페이스 구성하기

func application(_ application: 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
    }

0개의 댓글