종달랩 종다리 이야기

iOS 화면전환 및 데이터 전송정리(Navigation controller)

Computer Science/Android&iOS
반응형

3. 네비게이션 컨트롤러 (Navigation Controller)

 

네비게이션 컨트롤러는 다양한 페이지들이 서로 연관이 있다면 호출하고 다시 되돌아오는데 기본적인 편리성을 제공하는 View Controller입니다.

기존에 present는 화면전화 및 복귀를 내가 직접 코딩해야 했고, 복귀할때 적어도 1개의 버튼을 만들어야 했지만, Navigation Controller는 이러한 부분을 자동화 해준다고 보면됩니다.

 

기존 오래된 개발자 입장에서는 이 부분을 어떻게 이해해야 하나 고민했지만, 역시 오래보면 익숙해진다고, 그냥 익숙해지면 됩니다.

 

Navigation Controller를 만들기 위해서는 처음부터 Navigation Controller를 화면에 추가하거나, 기존의 ViewController에 Navigation Controller를 embed시키면 됩니다. 말로 풀어쓰면 어렵고, 화면을 보고 설명합시다.

 

Library입니다.

Library에서 Navigation Controller를 추가합니다. 이러면 다음과 같이

Library에서 Navigation Controller를 선택
화면에 2개의 View Controller가 표시가 됩니다.

표시가 됩니다. 기본적으로 Table View Controller가 추가가 됩니다. 여기서 Table View Controller안에 컨트롤을 삭제하고 마치 새것처럼 작업해도 됩니다. 

 

저는 이 방법보다는 기존에 사용하던 View Controller가 있다면, 거기에 Navigation Controller를 추가하는게 더 맘에 편합니다. 이 방법은

ViewController를 선택하고 메뉴에서 다음과 같은 기능을 선택합니다.

그림에 자세히 설명이 되어있습니다. View Controller를 선택하고, Editor/Embed In/Navigation Controller를 선택하면 됩니다.

 

Navigation Controller 와 연결된 View Controller들은 Navigation Item이 자동으로 생성되고, 뒤로가기가 자동으로 생성됩니다.

그렇습니다. 이렇게 자동으로 뒤로가기가 생성이 됩니다. 물론 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디자인이 필요합니다.

반응형