[swift] 모달 뷰에서 데이터를 다른 뷰로 전달하는 방법은?
델리게이트를 사용하는 방법
델리게이트를 사용하면 모달 뷰에서 발생한 이벤트를 처리하는 뷰 컨트롤러로 데이터를 전달할 수 있습니다. 델리게이트 패턴을 구현하여 모달 뷰에서 사용자 입력에 따라 델리게이트 메서드를 호출하고, 해당 메서드를 구현한 뷰 컨트롤러에서 데이터를 전달할 수 있습니다.
protocol ModalViewControllerDelegate: AnyObject {
func modalViewController(_ controller: ModalViewController, didTapButtonWithData data: String)
}
class ModalViewController: UIViewController {
weak var delegate: ModalViewControllerDelegate?
// 모달 뷰 내에서 버튼을 탭할 때 호출되는 메서드
@IBAction func buttonTapped() {
delegate?.modalViewController(self, didTapButtonWithData: "Hello, world!")
}
}
class MainViewController: UIViewController, ModalViewControllerDelegate {
func openModal() {
let modalVC = ModalViewController()
modalVC.delegate = self
present(modalVC, animated: true, completion: nil)
}
// 모달 뷰에서 전달받은 데이터를 처리하는 델리게이트 메서드
func modalViewController(_ controller: ModalViewController, didTapButtonWithData data: String) {
print("Data received from modal view: \(data)")
}
}
클로저를 사용하는 방법
클로저를 사용하여 모달 뷰에서 발생한 이벤트에 대한 처리 로직을 정의하고, 해당 클로저를 호출한 뷰 컨트롤러로 데이터를 전달할 수 있습니다.
class ModalViewController: UIViewController {
var didTapButton: ((String) -> Void)?
// 모달 뷰 내에서 버튼을 탭할 때 클로저를 호출하여 데이터를 전달
@IBAction func buttonTapped() {
didTapButton?("Hello, world!")
}
}
class MainViewController: UIViewController {
func openModal() {
let modalVC = ModalViewController()
modalVC.didTapButton = { data in
print("Data received from modal view: \(data)")
}
present(modalVC, animated: true, completion: nil)
}
}
델리게이트와 클로저 중 선택하여 사용하시면 됩니다. 올바른 데이터 전달 방식을 선택하고, 콜백을 통해 모달 뷰에서 메인 뷰로 데이터를 전달할 수 있습니다.