[Swift/iOS] Segue를 사용하여 VC2->VC1로 데이터 전달하기

김혜수·2021년 10월 1일
0

iOS를 개발하면서..

목록 보기
4/20

나는 여태까지 Segue를 이용하여 뷰컨간 데이터를 전달할때 VC1->VC2 인 경우에만 사용했었다. 가끔 VC2->VC1 으로 데이터를 전달해야 할 때는 Notification이나 Delegate를 사용했다. 그런데 APPS 스터디에서 강의를 들으면서 VC2->VC1으로 데이터를 전달하는 방법을 알게 되었다!!
그래서 Segue를 통해 데이터를 VC2->VC1로 전달하는 방법을 적어보려한다.

전달방법

스토리 보드에 다음과 같이 뷰컨을 구성해준다.

첫번째 뷰컨(FirstVC)에서 버튼을 눌러 두번째 뷰컨(SecondVC)으로 넘어간 후, SecondVC의 textfield에 내용을 입력하고 뒤로가기 버튼을 누르면 FirstVC의 라벨에 글자가 나타난다.

1. FirstVC에 UIButton, UILabel을 추가한다.

@IBOutlet weak var dataLabel: UILabel! // 두번째 뷰컨에서 받아 올 데이터를 표시하는 라벨

만들어준 버튼을 클릭해서 Control을 누른채로 SecondVC로 드래그한다. 그리고 show를 눌러 두 뷰컨을 segue로 연결한다.

2. SecondVC에 textfield를 추가하고, FirstVC 타입의 변수를 선언한다.

var firstVC: FirstVC?
@IBOutlet weak var textfield: UITextField!

3. FirstVC에 nextVC(SecondVC)의 프로퍼티인 fristVC가 자신(self)라고 써준다.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let nextVC = segue.destination as? SecondVC {
            nextVC.firstVC = self
        }
    }
  • prepare메소드세그로 인한 화면전환이 일어나기 직전에 호출되는 메서드다.
  • segue.destinationsegue의 목적지 뷰컨을 나타낸다.

화면이 전환되는 뷰컨은 nextVC이라고 정해준 후 이 뷰컨이 SecondVC 타입이라면, nextVC안의 firstVC이라는 프로퍼티를 자신의뷰컨(FirstVC)이라고 설정한다.
(글쓰면서 느끼는 것은.. 프로퍼티 이름을 굉장히 헷갈리게 했네..)

이 부분을 prepare메서드 안에 써주었기 때문에 버튼을 눌러 화면이 전환되기 직전에,
다음화면의 특정 프로퍼티가 현재 뷰컨(화면전환 되기 전 뷰컨)이 될 수 있는 것!

4. SecondVC에서 textfield내용을 firstVC의 dataLabel에 넣어준다.

override func viewWillDisappear(_ animated: Bool) {
	firstVC?.dataLabel.text = textfield.text
}
  • viewWillDisappear : ViewController의 생명주기에서, 뷰컨이 사라지기 직전에 호출되는 메서드이다.

3번에서 firstVC가 화면전환되기 이전VC(nextVC.firstVC = self)라고 명시해줬다. 따라서 현재 뷰(SecondVC)가 사라지기 전, firstVC의 dataLabel에 접근해 현재뷰컨의 textfield안의 내용을 넘겨준다.

나름 깨달은 부분

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let nextVC = segue.destination as? SecondVC {
            nextVC.firstVC = self
        }
    }

다음 뷰컨의 프로퍼티에 현재 뷰컨타입의 프로퍼티를 선언해주면, 화면전환 되기 전에 그 프로퍼티에 현재 뷰컨을 할당해줄 수도 있구나..
그러면 다음 뷰컨에서 다시 첫 뷰컨에 접근하기가 쉬워지겠구나.

실습코드
https://github.com/hyesuuou/APPS-Swift/tree/main/Week04/SegueDataSend

profile
iOS를 좋아하는 사람

0개의 댓글