iOS 화면전환 및 데이터 전송정리(Navigation controller)
Computer Science/Android&iOS3. 네비게이션 컨트롤러 (Navigation Controller)
네비게이션 컨트롤러는 다양한 페이지들이 서로 연관이 있다면 호출하고 다시 되돌아오는데 기본적인 편리성을 제공하는 View Controller입니다.
기존에 present는 화면전화 및 복귀를 내가 직접 코딩해야 했고, 복귀할때 적어도 1개의 버튼을 만들어야 했지만, Navigation Controller는 이러한 부분을 자동화 해준다고 보면됩니다.
기존 오래된 개발자 입장에서는 이 부분을 어떻게 이해해야 하나 고민했지만, 역시 오래보면 익숙해진다고, 그냥 익숙해지면 됩니다.
Navigation Controller를 만들기 위해서는 처음부터 Navigation Controller를 화면에 추가하거나, 기존의 ViewController에 Navigation Controller를 embed시키면 됩니다. 말로 풀어쓰면 어렵고, 화면을 보고 설명합시다.
Library에서 Navigation Controller를 추가합니다. 이러면 다음과 같이
표시가 됩니다. 기본적으로 Table View Controller가 추가가 됩니다. 여기서 Table View Controller안에 컨트롤을 삭제하고 마치 새것처럼 작업해도 됩니다.
저는 이 방법보다는 기존에 사용하던 View Controller가 있다면, 거기에 Navigation Controller를 추가하는게 더 맘에 편합니다. 이 방법은
그림에 자세히 설명이 되어있습니다. View Controller를 선택하고, Editor/Embed In/Navigation Controller를 선택하면 됩니다.
그렇습니다. 이렇게 자동으로 뒤로가기가 생성이 됩니다. 물론 Navigation Controller와 연결을 시켜야 하지만요.
연결여부는 여기를 통해서 확인됩니다. Show 형태로 되었습니다. 이건 뭘 의미할까요.
사실 이러한 연결은 No coding형태입니다. Present에서도 이야기 드렸듯이 코딩으로 또는 No coding으로 구현이 가능합니다.
위에 마우스가 아닌 버튼에 함수를 설정하면 다음과 같을 것입니다.
@IBAction func moveByNavy(_ sender: Any){
guard let uvc = self.storyboard?.instantiaterViewController(withIdentifier: "SecondVC") else{
return
}
self.navigationController?.pushViewController(uvc, animated: true)
}
navigationController의 pushViewController(_, animated:)를 이용한것입니다. 그래서 Show(e.g. Push)로 표시가 되는 것입니다.
뒤로가기 위해서는 자동으로 뒤로가는 버튼이 생성이 됩니다. 물론 이것도 우리는 코딩으로 처리할 수 있습니다.
@IBAction func back(_ sender: Any){
self.navigationController?.popViewController(animated: true)
}
여기서 조심해야 할것은 NavigationController를 이용하게 되면 우리 의지와는 상관없이 NavigationItem이 추가로 생성되고, 왼쪽에 뒤로가기 버튼이 자동으로 생성된다는 것입니다. UI충돌을 막기 위해서는 View Controller의 왼쪽상단에 Navigation Item이 생성되는것을 고려한 UI디자인이 필요합니다.
'Computer Science > Android&iOS' 카테고리의 다른 글
iOS 화면전환 및 데이터 전송방식(동기 방식) (0) | 2022.08.04 |
---|---|
iOS 화면전환 및 데이터 전송방식(비동기 방식) (0) | 2022.08.04 |
iOS 화면전환 및 데이터 전송정리(Segue를 이용한 전환) (0) | 2022.08.03 |
iOS 화면전환 및 데이터 전송정리(present without coding) (0) | 2022.08.03 |
iOS 화면전환 및 데이터 전송정리(present) (0) | 2022.08.03 |