•
SecondViewController
@IBAction func touchUpDismiss(_ sender: Any) {
guard let dvc = self.presentingViewController as? ViewController else { return }
dvc.editLabels(part: partTextField.text ?? " ", name: nameTextField.text ?? " ")
dismiss(animated: true, completion: nil)
}
Swift
복사
ViewController
func editLabels(part: String, name: String) {
partLabel.text = part
statusLabel.text = "\(name) 님 안녕하세요 ~~ 🥰"
}
Swift
복사
1.
SecondViewController에서 로그인 버튼을 누르는 경우, ViewController가 presenting 되면서 ViewController의 editLabels라는 함수를 call 한다.
2.
TextField.text의 값이 editLabels의 part와 name으로 전달된다.
3.
ViewController의 partLabel.text값과 statusLabel.text로 넣어져서 ViewController로 dismiss 됐을 때 label의 값이 모두 변경된다.
•
ViewController
@objc func touchUpPresent() {
let loginVc = LoginViewController()
let vc = UINavigationController(rootViewController: loginVc)
vc.modalPresentationStyle = .fullScreen
loginVc.editLabelText = { part, name in
self.partNameLabel.text = part
self.introduceLabel.text = "\(name) 님 안녕하세요!!!😂"
}
present(vc, animated: true, completion: nil)
}
Swift
복사
LoginViewController
var editLabelText: ((String, String) -> ())?
@objc func touchUpLogin() {
editLabelText?(partTextField.text ?? " ", nameTextField.text ?? " ")
dismiss(animated: true, completion: nil)
}
Swift
복사
1.
ViewController에서 바로 LoginViewController를 사용하면 NavigationController가 present되지 않고 NavigationController만 present하면 빈 NavigationController가 present되기 때문에 UINavigationController와 함께 rootViewController를 LoginViewController로 정해주어 LoginViewController가 present될 수 있게 하였다.
2.
LoginViewController에서 editLabelText라는 closure를 선언해서 ViewController로 TextField.Text값을 전달해줬다.