티스토리 뷰

부스트코스 - iOS

[Swift] Navigation

둥찬 2021. 7. 27. 01:03

"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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함