종달랩 종다리 이야기

iOS 화면전환 및 데이터 전송정리(Segue를 이용한 전환)

Computer Science/Android&iOS
반응형

4. Segue

 

Segue는 화면간의 연결을 표시하는 링크와 같다고 저는 이해했습니다. 그것의 이름이 Segue고요.

No Coding환경에서 Segue는 굳이 이름이 없어도 되는 경우가 많습니다. 하지만, 이건 기존 개발자들에게는 매우 불안한 요소입니다. 왜 불안하냐면.. 그냥 이름이 없으니까요.

 

코딩없이 우리가 Segue를 이용한것을 "Action Segue"라고 합니다. 버튼, 테이블 셀의 이벤트 트리거에 자동으로 연결이 되기 때문입니다.

Action Seguq라고 이름이 나옵니다. 오른쪽 마우스버튼으로 호출되는 메뉴입니다.

이건 굳이 우리가 프로그래밍 하지 않아도 되고, Storyboard를 통해서 직관적(?)으로 알 수 있습니다. 

사실 직관적이지는 않죠. 화면이 많으면 더더욱.. 하지만 코딩을 하지 않는것이 어디입니까.

 

이것말고 우리는 프로그램으로 제어하는 방법을 알려드리고자 합니다. 이걸 "Manual Segue"라고 합니다.

 

Action Segue는 버튼과 같은 컨트롤과 ViewController간의 관계입니다. 그렇기 때문에 해당 버튼의 동작과 연결시킬 수 있었습니다. 하지만, Manual Segue는 ViewController간의 관계를 정의해주고 이름을 명명해줘야 합니다. 역시 그림으로 설명합니다.

Manual Segue는 다음과 같이 생성합니다.

 

Action Segue는 다음과 같이 컨트롤과 Segue를 하일라이트 합니다.
Manual Segue는 ViewController를 전체로 표시합니다.

이제 우리는 Segue의 이름을 정해줘야 합니다.

Seguq의 이름은 Identifier에 넣으면 됩니다.

이제 버튼을 누르면 Segue를 통해서 화면전환하는 코드를 작성합니다. 이때 사용하는 함수와 예제 코드는 다음과 같습니다.

@IBAction func wind(_ send: Any){
  self.performSegue(withIdentifier:"ManualWind", sender:self)
}

여기서 함수 이름을 왜 wind라고 졌을까요. 지금까지 작명과는 다른데 말이죠.

 

화면전환하는 것을 iOS에서는 wind된다고 합니다. 그럼 그 반대는 unwind이겠죠.. 

 

여기서 재미있는것은 unwind되는 시점을 각각의 ViewController안에 작성해야 한다는 것입니다. 그래야 우리는 unwind되는 곳의 함수를 불러서 그쪽으로 이동하게 됩니다.

 

@IBAction func wind(_ send: Any){
  self.performSegue(withIdentifier:"ManualWind", sender:self)
}

@IBAction func unwindToVC(_ segue: UIStoryboardSegue){}

위 코드뭉치를 보면 wind를 통해서 해당 segue와 연결된 ViewController로 이동을 하게 됩니다. 그런데 복귀되는 함수도 같이 있습니다. 즉, 이 함수를 통해서 우리는 현재의 ViewController로 돌아오게 됩니다.

 

unwindToVC는 오른쪽 ViewController의 상단 "Exit"버튼과 연결됩니다.

ViewController에는 항상 위에 3개의 버튼이 있습니다. 그중에 가장 마지막에 "Exit"가 이런 unwind함수들과 연결이 됩니다.

 

unwind함수를 만드는것은 간단합니다. 함수 parameter에 (_ segue: UIStoryboardSegue) 만 정의하면됩니다. 그러면 swift가 전체 코드에서 다음과같은 parameter가 있는 함수들 리스트를 보여주고, 우리는 돌아갈 ViewController의 unwind함수만 선택하면 됩니다.

위에 그림을 보면 왼쪽에 Exit 바로 밑에 unwind가 있는것을 볼 수 있습니다.

 

버튼을 Exit와 연결시킵니다.
unwind함수들 즉 함수 parameter가 (_ segue: UIStorygoardSeguq) 인 함수리스트를 보여줍니다.

물론 전에 unwind함수를 표시하므로 내가 가야할 곳의 ViewController의 함수를 잘 선택해야 합니다.

 

휴.. 지금까지 속성으로 화면전환을 정리했습니다.

 

기존 개발자는 화면 컨트롤만으로 동작하는게 너무 힘들었습니다. 하지만, 익숙해지면 되는문제였습니다. 다만, 한번에 코드안에서 파악이 안된다는것은 아직도 생소합니다.

 

화면전환은 총 3가지 입니다.

- present(_, animated:) <-> presentingViewController.dismiss()

- navigationController.pushViewController() <-> navigationController.popViewController()

- performSegue(withIdentifier:,sender:) <-> unwind 함수

 

다음에는 화면전환시 데이터를 어떻게 주고 받는지를 정리합니다.

 

반응형