BOID

[iOS] 화면 전환하기 (3/4) - HooniOS 본문

IOS 시작기

[iOS] 화면 전환하기 (3/4) - HooniOS

HoonIOS 2021. 3. 23. 17:28

안녕하세요 HoonIOS입니다 :)

 

저번 시간에 뷰끼리 화면 전환 뷰 컨트롤러를 통한 화면 전환을 알아봤습니다.

이번 시간에는 내비게이션 컨트롤러를 이용한 화면 전환에 대해 알아보겠습니다.

 

내비게이션 컨트롤러의 정의 및 특징

- 뷰컨트롤러의 특별한 종류로, 계층적인 성격을 띠는 콘텐츠 구조를 관리하기 위한 컨트롤러입니다.

- 뷰컨트롤러의 전환을 직접 컨트롤하고, 앱의 내비게이션 정보를 표시하는 역할을 할 뿐만 아니라 화면 전환이 발생하는 뷰 컨트롤러들의 포인터를 스택으로 관리하여 원하는 화면에 접근을 쉽게 합니다.

* 스택인란?
스택(Stack)

- LIFO(선입후출) 방식으로 제일 나중에 메모리에 들어온 데이터가 제일 먼저 나가는 방식
- 차곡차곡 쌓여지는 방식이라고 생각을 하면 됩니다.

 

- 내비게이션 컨트롤러는 뷰 컨트롤러의 계층적 구조를 관리하는 역할로 직접 콘텐츠를 담고 화면을 구성하지 않습니다.

- 독립된 자신만의 화면을 가지지 않는 대신, 이 컨트롤러가 제어하는 모든 뷰 컨트롤러에 내비게이션 바를 생성하는 특징이 있습니다.

 

* 내비게이션 바란?
- 내비게이션 컨트롤러와 연결되 모든 뷰 컨트롤러는 내비게이션 바가 표현이 됩니다.
내비게이션 바

 

- 내비게이션 컨트롤러는 항상 콘텐츠 계층 구조의 시작점 역할을 하는 뷰 컨트롤러와 함께 다니는데 이를 루트 뷰 컨트롤러라고 합니다.
( 내비게이션 앱을 켰을때 제일 첫 번째 뷰 컨트롤러가 루트 뷰 컨트롤러라고 한다. )

 

* 내비게이션 컨트롤러의 장점
- 이 컨트롤러가 만들어내는 내비게이션 인터페이스는 데이터를 사용자에게 보여주는데 매우 효율적일 뿐만 아니라 사용자가 원하는 정보에 더 쉽게 접근하도록 도와줍니다.

- 내비게이션 인터페이스를 이용하여 화면이 지나치게 길어지거나 한눈에 파악하기 어려운 방대한 정보를 한 번에 사용자에게 제공하는 불상사를 피할 수 있습니다.

 

- 스택의 최상위에 뷰 컨트롤러를 추가할 때는 pushViewController(_:animated)메소드를 사용하고 반대로 최상위에 있는 뷰 컨트롤러를 제거할 때는 popViewController(_:animated)메소드를 사용합니다.

- 스택의 최상위에 있는 뷰 컨트롤러가 화면에 표시되므로 결국 스택에 화면을 추가하면 화면을 전환하는 것과 같다고 보시면 됩니다.

 

* 내비게이션 컨트롤러에서 화면 전환 메소드

- 새로운 화면을 표시: pushViewController(_:animated:)

- 이전 화면으로 돌아오려면: popViewController(_:animated:)

 

내비게이션 bar Button Item 이란?

내비게이션 컨트롤러에 barButtonItem추가

- 위 예제에서 +버튼은 내비게이션 바 버튼으로 내비게이션 바 부분에는 일반 버튼을 추가할 수 없습니다. 만약 일반버튼을 추가하게 되면은 자동을 bar Button Item으로 변경됩니다.

- 내비게이션 바 버튼을 추가할수 있는 위치는 내비게이션 바 기준으로 왼쪽, 중앙, 오른쪽에 위치할 수 있습니다.

- 아래 영상을 보면 내비게이션 컨트롤러에 직접 연결된 루트 뷰 컨트롤러뿐만 아니라 내비게이션 컨트롤러가 제어하는 모든 뷰 컨트롤러의 상단에 내비게이션 바가 삽입되어있는 것을 확인할 수 있습니다.

 

내비게이션 컨트롤러 화면 전환

- 위 영상에서 내비게이션 바에 있는 내비게이션 아이템을 보면은 rootViewController가 표시된 화면이 보이실 텐데요 그 화면이 내비게이션 컨트롤러의 루트 뷰 컨트롤러입니다.

- +(bar Buttton Item)을 추가해줘 pushViewController을 통해 스택에 추가를 해주고 다음 화면으로 넘어가면 <rootViewController라는 뒤로 가기 버튼이 자동으로 생기는걸 확인할수 있습니다.
이것은 구현을 해주지 않아도 자동으로 구현이 되는 내비게이션 컨트롤러의 특징입니다.

- 위 영상에서는 pop이라는 버튼에 popViewController(_:animated:)를 구현해 뒤로 가기 메소드를 설정해 주었는데요, 꼭 내비게이션의 Bar Button Item을 통해 뒤로가기 메소드를 구현해줄 필요없이 버튼에 메소드를 설정해서 구현해줘도 되는 것을 확인해 봤습니다.

 

 

내비게이션 컨트롤러에서 present메소드 사용하기

- 만약 present 메소드로 구현한 버튼을 통해 화면 전환을 하면 상단에 내비게이션 바가 생성되지 않습니다. 즉 화면 전환의 메소드에 따라 뷰 컨트롤러의 상태가 달라지는 것을 알 수 있습니다.

- 동일한 뷰 컨트롤러임에도 전환 방식에 따라 상태가 달라져서 내비게이션 컨트롤러의 제어 하에 놓이기도 그렇지 않기도 하다는 것을 알 수 있습니다.

 

화면 전환에서 제일 중요한 것은 present, pushViewController 메소드의 호출 대상에 주의해야 하는 것입니다. present메소드의 호출 대상은 뷰 컨트롤러 자신이지만, pushViewController메소드의 호출 대상이 내비게이션 컨트롤러이기 때문입니다. 따라서 화면 전환 메소드를 사용했을 때 어떤 방식으로 구현을 해줬는지 잘 봐야 됩니다.

 

만약에!!! 형식에 안 맞게 구현해주면 메소드가 동작을 안 합니다....ㅠㅠㅠㅠㅠㅠ

 

꼭! 꼭! 꼭!!!!!!!!!!!!! 중요합니다!!!!!(궁서체)

 

지금까지 내비게이션 컨트롤러의 화면 전환에 대해 알아봤는데요 다음 시간에는 세그웨이를 이용한 화면 전환에 대해 알아보겠습니다.

반응형
Comments