티스토리 뷰
"Sopt 28th 세미나 <1차 세미나> 뷰의 전환" 부분에서 네비게이션과 모달을 다뤘지만 조금 더 자세하게 알아보겠다 ..!
네비게이션 컨트롤러는 컨테이너 뷰 컨트롤러로써 내비게이션 스택을 사용하여 다른 뷰 컨트롤러를 관리한다 !
여기서 내비게이션 스택에 담겨서 콘텐츠를 보여주게 되는 뷰 컨트롤러들을 컨텐트 뷰 컨트롤러라고 한다.
내비게이션 컨트롤러는 두 개의 뷰를 화면에 표시한다. 하나는 내비게이션 스택뷰에 포함된 최상위 컨텐트 뷰 컨트롤러의 콘텐츠를 나타내는 뷰와 내비게이션 컨트롤러가 직접 관리하는 뷰 (navigation bar / tool bar) 가 있다.
추가로 내비게이션 인터페이스의 변화에 따른 특정 액션을 동작하도록 하기 위해 내비게이션 델리게이트 객체를 사용할 수 있다.
내비게이션 스택이란 ?
- 내비게이션 컨트롤러에 의해 관리되는 내비게이션 스택은 뷰 컨트롤러를 담을 수 있는 배열과 같다.
- 내비게이션 스택에 가장 하위에 있는 뷰 컨트롤러는 내비게이션 컨트롤러의 루트 뷰 컨트롤러가 된다.
- 루트 뷰 컨트롤러는 내비게이션 스택에서 팝되지 않는다.
- 내비게이션 스택의 가장 상위에 있는 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 보이게 된다.
- 내비게이션 스택은 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]?
코드작성을 통한 내비게이션 인터페이스 구성
루트 뷰 컨트롤러가 될 뷰 컨트롤러를 생성
let rootViewController = UIViewController()
위에서 생성한 뷰 컨트롤러로 내비게이션 컨트롤러를 생성
let navigationController = UINavigationController(rootViewController: rootViewController)
self.window = UIWindow(frame: UIScreen.main.bounds)
윈도우의 루트 뷰 컨트롤러로 내비게이션 컨트롤러를 설정합니다.
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
'부스트코스 - iOS' 카테고리의 다른 글
[Swift] Singleton Pattern (0) | 2021.07.31 |
---|---|
[Swift] Delegation (0) | 2021.07.30 |
[Swift] MVC 패턴 (0) | 2021.07.25 |
[Swift] 프로그래밍 디자인 패턴 (0) | 2021.07.25 |
[Swift] Frame & Bounds (0) | 2021.07.25 |
댓글