-
[ios/Swift] 화면 전환간 데이터 전달 - 동기식(present 화면전환)Study/ios 2023. 2. 20. 00:12
두 개의 뷰컨트롤이 있을 때 VC1(ViewController1)에서 present로 연 VC2(ViewController2)로 값 전달하기
- 화면 전환간 데이터를 직접 전달 방식(동기식)을 통해 전달한다.
- 직접 전달 방식(동기식)은 영속적으로 값을 저장할 필요가 없는 화면 전환에서 사용된다.
- 화면 전환 방법은 present를 사용하고 VC1에서 VC2의 인스턴스를 생성하여 프로퍼티에 값을 대입한다.
- VC1에서 VC2 인스턴스를 생성하여 VC2 프로퍼티에 값을 대입하고 present를 통해 화면을 전환한다.
1. VC1 준비하기
- text, isOn, stepper값을 입력할 수 있는 뷰컨트롤을 준비한다.
- VC2로 전환하기 위한 Submit 버튼도 배치한다.
2. VC1에서 입력한 값을 출력할 VC2를 준비한다.
- VC1의 Submit버튼으로 호출되고 레이블에 VC1에서 입력한 데이터를 출력한다.
- Back 버튼을 통해 화면을 종료한다.
3. 화면을 전환하여 입력한 데이터를 출력
- VC2 인스턴스를 생성하여 프로퍼티에 값을 대입
- present를 통해 화면 전환
// VC1 코드 중.. // Submit버튼 클릭시 호출 @IBAction func onSubmit(_ sender: Any) { // VC2 인스턴스 생성 / VC2의 storyboard ID : RVC guard let rvc = self.storyboard?.instantiateViewController(withIdentifier: "RVC") as? ResultViewController else { return } // 값 전달 rvc.paramEmail = self.email.text! rvc.paramUpdate = self.isUpdate.isOn rvc.paramIntervar = self.interval.value // 화면 이동 self.present(rvc, animated: true) }
- viewDidLoad 함수를 통해 화면이 로드되면 레이블에 전달 받은 값 출력
- dismiss 함수로 화면 종료
// VC2 코드 중.. override func viewDidLoad() { // 전달 받은 값을 각 레이블에 출력 self.resultEmail.text = paramEmail self.resultUpdate.text = (self.paramUpdate == true ? "자동갱신" : "자동갱신 안함") self.resultInterval.text = "\(Int(paramIntervar)) 분 마다" } // Back버튼 클릭시 발동 @IBAction func onBack(_ sender: Any) { // 화면을 종료 self.presentingViewController?.dismiss(animated: true) }
4. 결과
깃허브
https://github.com/EunDuk2/Swift_Blog/tree/master/SubmitValue_present
'Study > ios' 카테고리의 다른 글
[ios/Swift] TableView 사용법 - 기본 (0) 2023.03.19 [ios/Swift] 객체의 속성으로 객체배열 정렬하기 (0) 2023.03.12 [ios/Swift] UserDefaults객체에 객체배열 저장하고 가져오기 (0) 2023.03.12 [ios/Swift] UserDefaults를 통한 비동기식 데이터 전달 (0) 2023.03.08 [ios/Swift] 데이터 받아오기 - 동기식(Segue Action) (0) 2023.03.07