티스토리 뷰

뷰와 뷰가 서로 열리거나 닫힐때

서로에게 입력된 값을 전달해야하는 상황은 빈번하게 일어나는데요.

 

물론 여러가지 방법이 있겠지만 가장 간단한 방법으로 알아보도록 하겠습니다. 

 

값만 전달해줄꺼라 뷰는 간단하게만 해주시면 됩니다. 

 

저는 아래처럼 만들어두고 진행하겠습니다. 

구분을 위해 배경을 다르게 했습니다.

 

일단 설명할때는 편의를 위해 

A : 시작할 때 열리는 뷰 (왼쪽 하얀 뷰 - GetParamViewController)

B : 새로 열리는 뷰 (오른쪽 검은 뷰  - SendParamViewController)

라고 정의 하겠습니다.

 

일단 A 에서 B 로 창을 열때 값을 보내주도록 합시다. 

"수정하러가기" 를 누르면 "입력"(UILabel) 이란 값을 B 로 보내줄꺼에요.

 

A 코드

import Foundation
import UIKit

class GetParamViewController: UIViewController {
    
    @IBOutlet weak var displayLbl: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    @IBAction func openViewController(_ sender: Any) {
        guard let vc = self.storyboard!.instantiateViewController(withIdentifier: "SendParamViewController") as? SendParamViewController else{return}
        vc.modalPresentationStyle = .overFullScreen // 원하시는 걸로 바꾸셔도 됩니다.
        vc.getValue = displayLbl.text ?? "" // 데이터를 넘기는 부분입니다.
        self.present(vc, animated: true)   
    }

}

B에서는 받은 값을 저희가 봐야 알겠죠?

B 코드

import Foundation
import UIKit

class SendParamViewController: UIViewController {
    
    @IBOutlet weak var inputTF: UITextField!
    var getValue : String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        inputTF.text = getValue // 받은 값을 세팅해주세요.
 
    }   
}

 

B 에서 창을 닫을때 A 로 값을 보내봅시다. 

 

저희는 아래 녹색 버튼을 누르면 창이 닫히고 저기 라벨이 바뀌는걸로 만들어봅시다. 

B 코드 에 아래 부분을 추가해주세요. 

@IBAction func closeAndSend(_ sender: Any) {
    guard let parent = self.presentingViewController as? GetParamViewController else{return}
    parent.displayLbl.text = inputTF.text // 값 보내주세요
    self.dismiss(animated: true)
}

* 해당 코드는 Swift5 부터 가능하다고 하니 주의해 주세요 

 

 

이제 실제로 실행해봅시다.

정상 작동!

 

 

새로운 뷰에 값을 주는 건 간단한데 

유독 뷰를 닫고 기존뷰에 값을 주는 것은 자주 까먹더라고요;;;

 

그래서 한번 정리해서 올려봅니다. 

 

저처럼 잘 까먹으시는 분들에게

도움이 되길 바랍니다. 

 

오늘도 파이팅입니다.

댓글