다른 뷰 컨트롤러와 데이터 주고받기

2022. 6. 9. 19:14iOS

화면 전환 과정에서의 값 전달 방식

-뷰 컨트롤러에 값을 직접 전달 하는 방식(동기 방식)

: 영속적으로 값을 저장할 필요가 없는 화면 전환에서 사용된다.

 

-공통의 저장소를 만들어 두고 값을 공유 하는 방식(비동기 방식)

:지속적으로 값을 저장할 필요가 있는 화면 전환에서 사용된다. (ex:로그인정보 저장)

 

뷰 컨트롤러에 직접 값을 전달하기

뷰 컨트롤1 에서 뷰 컨트롤 2로 값을 전달하는 과정

1-VC1에서는 VC2로 전달할 값을 준비합니다.

2-VC2에서는 값을 대입받을 프로퍼티를 정의합니다.

3-VC1에서는 VC2의 인스턴스를 직접 생성하거나, 이미 생성되어 있는

인스턴스의 참조를 읽어 옵니다.

4-VC1에서는 2번에서 정의한 VC2 인스턴스의 프로퍼티에 값을 대입합니다.

5-VC1에서 VC2로 화면을 전환합니다.

@IBAction func onSwich(_ sender: UISwitch) {

        if (sender.isOn == true) {

            self.isUpdateText.text = "갱신함"

        } else {

            self.isUpdateText.text = "갱신하지 않음"

        }

    }

 

//갱신 주기가 바뀔 때마다 호출되는 메소스

    @IBAction func onStepper(_ sender: UIStepper) {

        let value = Int(sender.value)

        self.intervalText.text = "\(value)분마다"

    }

 

두번째 뷰 컨트롤러를 생성하고 코드 입력하기

세컨트 뷰 컨트롤러 코드 구현

 

 

저장소를 사용하여 값을 주고 받기

-AppDelegate 객체를 사용하여 값을 주고 받기

앱델리게이트에 클래스를 추가한다. 변수들은 뷰 컨트롤러에 직접 값을 전달할때 추가 했던 변수들과 동일.

다음 뷰컨트롤러로 이동 하여 값을 가져온다.

 

 //AppDelgate 객체의 인스턴스를 가져온다.

    let ad = UIApplication.shared.delegate as? AppDelegate

    

    //값을 저장한다.

    ad?.paramEmail = self.email.text

    ad?.paramUpdate = self.isUpdate.isOn

    ad?.paramInterval = self.interval.value

    // 이전 화면으로 복귀한다.

    self.presentingViewController?.dismiss(animated: true)

 

저장소에 클래스를 저장한다.

사용할 뷰 컨트롤러에 객체의 인스턴스들을 가져온다.

값을 저장한다. 이전화면으로 복귀한다. 순서로 작업을 하면 된다.