BOID
[iOS] 데이터 직접 전달하는 방식(내비게이션, 세그웨이 이용) - HoonIOS 본문
안녕하세요 HoonIOS입니다. :)
저번에는 프레젠테이션 방법을 이용해서 값을 전달하는 방법에 대해 알아봤습니다.
혹시 안 읽어보셨으면 읽고 오시면 좋을 거 같아요 이어지는 부분도 있거든요!!!
내비게이션 컨트롤러의 값을 전달하는 방식은 앞 포스팅에서 이야기한 프레젠테이션 방법과 같습니다. 단지 다른점은 화면을 전환하는 메소드만 다른 방식입니다.
내비게이션 컨트롤러의 값 전달 구현하기
- 앞 포스팅한 내용을 활용해보겠습니다.
( 다시 만들고 그러면 귀찮고 다들 싫어하실 거잖아요 ㅎㅎㅎㅎ )
- 내비게이션 컨트롤러로 만들어야 하기때문에 VC1에 내비게이션 뷰 컨트롤러를 임베디드 인을 시키겠습니다.
- 내비게이션 바를 좀 꾸며 보겠습니다. 내비게이션 아이템을 추가해서 타이틀을 설정으로 설정해주고 프레젠테이션 썻던 Done 버튼을 이제 내비게이션 바에 올려서 바 버튼 아이템을 추가해보겠습니다.
- 이렇게 생각하실수 있지만 애플의 UI 지침은 내비게이션 바를 사용할 경우 액션 처리 버튼은 내비게이션 바에 배치하는게 좋다고 나와있습니다.
- 원래 전에 쓰던 Done 메소드 버튼을 끊었고 바 버튼으로 추가를 해주었으니 액션메소드를 재연결을 해보겠습니다.
아... 아... Done메소드를 이미 정의해 주었으니 다시 연결을 해주겠습니다.
- 위 영상을 보시면은 아울렛 변수나 아울렛 메소드는 만약 연결이 안 되어 있으면 원 아이콘이 비어있는 상태로 표시되어 있는 게 보이실 겁니다.
* 다시 연결을 하는 방법은 그냥 원버튼을 클릭해서 스토리보드 객체로 드래그를 하던가 아니면 스토리보드 객체에서 메소드로 드래그해주면 다시 연결을 할 수 있습니다.
- 화면 전환 방법을 내비게이션 전환 방법으로 변경하겠습니다.
- 전환 방법은 엄청 간단합니다.
내비게이션 컨트롤러는 스택형이므로. present방법으로 했던 방법을. pushViewController(_:animated)로 구현을 해주면 됩니다.
- 어때요 전환 방법만 빼고 똑같죠?
- 이제는 전달이 잘 되는지 한번 확인을 해보겠습니다.
내비게이션 컨트롤러는 저번 프레젠테이션 방식의 값 전환과 큰 차이가 없다는 것을 알 수 있습니다.
뭐 이 정도 예시는 뭐 간단하죠 ㅎㅎ?
세그웨이를 이용하여 값 전달 구현하기
- 세그웨이 종류에는 매뉴얼 세그웨이랑 액션 세그웨이가 있는데 어느 세그웨이든 값을 전달하는 방식은 동일합니다.
내비게이션으로 했던 프로젝트를 매뉴얼 세그웨이로 다시 구현해보겠습니다.
세그웨이 구현해보기
- 우선 VC1에서 VC2로 세그웨이 연결을 해줍니다. 여기서 내비게이션 컨트롤러가 사용되었으니 Show 타입으로 생성해줍니다.
- 화면 전환 포스팅에서 말씀을 드렸지만 매뉴얼 세그웨이는 액션 세그웨이라 달리 소스코드로 직접 호출해서 전환을 해야 합니다
- 직접 호출하기 위해 무슨 세그웨이 인가 identifier을 설정해 줍니다.
( 여기서는 ManualData로 설정해 줍니다. )
- 이제는 세그웨이 기능을 구현해야겠습니다. 새 버튼을 추가하기보다는 앞 실습에서 사용했던 내비게이션 바 버튼을 새로운 메소드로 생성해서 다시 연결해 보겠습니다.
- 그전에 우선 내비게이션 바 버튼에 연결해 놓은 메소드를 끊어야 합니다.
- 바 버튼을 클릭하고 커낵션 인스펙터에 있는 메소드 연결 정보에 x 아이콘을 클릭하여 삭제를 합니다.
( 여기서 메소드가 사라지는 게 아니고 연결이 끊어지는 것입니다. 절. 대 헷갈리지 마세요! )
- 그다음 순서로 바 버튼의 아울렛 메소드를 생성해줍니다. 메소드 이름은 segueData로 할게요 :)
- 해당 메소드안에 매뉴얼 세그웨이를 실행시켜주는 performSegue메소드를 구현해줍니다.
이제 화면 전환을 위한 세팅은 모두 끝났습니다. 그러나 아직 모든 게 끝난 게 아니죠? 값 전달을 안 했습니다.
값 전달을 구현해줄 때 제일 중요한 것은 무엇일까요?
- 제일 중요한것은 구현해주는 위치입니다.
- 값을 전달하기 위한 제일 좋은 위치는 전처리 메소드입니다. 그 이유는 전처리 메소드는 세그웨이를 실행하기 직전에 실행이 되고 필요한 것만 작성만 해두면 시스템에 의해서 자동으로 호출이 되기 때문입니다.
- 매뉴얼, 액션 세그웨이 구분이 없이 둘 다 값 전달할 때 전처리 메소드에서 구현해주면 됩니다.
혹시 전처리 메소드를 처음 들어보셨거나 헷갈리네.... 이러시면 제가 포스팅한 여기를 들어가서 읽어보고 오시는걸 매. 우. 추. 천. 드. 립. 니. 다.
- 세그웨이는 앞 내비게이션, 프레젠테이션 방법과 달리 값을 전달할 뷰 컨트롤러의 인스턴스를 직접 생성하지 않습니다.
- 그 이유는 세그웨이의 목적지로 연결된 인스턴스는 세그웨이에 의해 자동으로 생성이 되기 때문입니다.
- 이제 전처리 메소드를 이용하여 인스턴스를 가져오고 값도 전달하도록 구현을 해보겠습니다.
- 차례대로 위의 전처리 메소드 코드들을 설명해보겠습니다.
- segue.destination을 통하여 세그웨이의 목적지 뷰 컨트롤러 인스턴스를 가져옵니다. segue는 세그웨이 객체를 의미합니다.
- vc2 변수에 목적지 뷰 컨트롤러의 인스턴스를 넣습니다. 여기서 단지 화면을 이동하는게 아니라 해당 뷰컨트롤러의 프로퍼티(변수)도 가져오기 때문에 ViewController2로 다운 캐스팅을 했습니다.
- 이제 vc2의 변수를 이용하여 각 값 객체들의 값을 넣어줍니다.
이제 구현이 모두 끝났습니다 결과를 한번 봐볼까요?
어떤가요? 세그웨이로 구현해도 내비게이션으로 구현한 것처럼 부드럽게 잘 진행되는 것을 볼 수 있습니다 :) 뿌듯하네요
이번 포스팅은 매뉴얼 세그웨이를 이용했지만 액션 세그웨이로 구현을 하려고 해도 똑같이 prepare전처리 메소드를 사용하면 됩니다.
긴 글 읽어주셔서 감사합니다 :)
엄청 기네요 이제 다음으로 이전 화면으로 값을 전달하는 방법 즉 거꾸로 값을 전달하는 법을 포스팅하겠습니당~
'IOS 시작기' 카테고리의 다른 글
[iOS] Appdelegate객체를 사용하여 값 전달 - HoonIOS (0) | 2021.04.07 |
---|---|
[iOS] 이전 화면으로 값을 전달하기 (1) | 2021.04.05 |
[iOS] 데이터 직접 전달하는 방식 (동기방식) -HoonIOS (0) | 2021.04.03 |
[iOS] 다른 뷰컨트롤러와 데이터 주고받기 - HoonIOS (1) | 2021.04.02 |
[iOS] 전처리 메소드의 활용 -HoonIOS (0) | 2021.03.29 |