반응형
d상위에서 하위로 데이터를 전달하는건 delegate pattern을 이용하는 것 보다 간단합니다.
이는 Segue를 이용할 때와 Code를 이용할때 방법이 다릅니다.
- 상위에서 하위로 데이터를 전달하는 방법
1. Code를 이용할 때
2. Segue를 이용할 때
1. Code를 이용할 때
상위
// 상위 ViewController
class ViewController: UIViewController, SendDataDelegate {
@IBAction func "누르면 이동할 버튼"(_ sender: UIButton) {
// 스토리보드에서 이름 붙이고 이름을 가져옴
guard let viewController = self.storyboard?
.instantiateViewController
(withIdentifier: "이동할 뷰 컨트롤러")
as? "이동할 뷰 컨트롤러" else{return}
// 데이터 넘기기
viewController.name = "전달할 데이터"
// 가져온 ViewController로 Push
self.navigationController?.pushViewController(viewController, animated: true)
}
}
하위
// 하위 ViewController
class CodePushViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
// 상위에서 데이터를 전달할 프로퍼티 미리 정의
var name: String?
// View가 Load되면 현재 화면의 Label에 받아온 데이터 전달
override func viewDidLoad() {
super.viewDidLoad()
if let name = name {
// 라벨에 데이터 전달
self.nameLabel.text = name
}
}
// 돌아가기
@IBAction func Back(_ sender: UIButton) {
self.navigationController?.popViewController(animated: true)
}
}
2. Segue를 이용할 때
상위
// 상위 ViewController
class ViewController: UIViewController, SendDataDelegate {
// Segue되기 직전 실행되는 method override
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// 전환하려는 뷰 컨트롤러의 instance
if let viewController = segue.destination as? "이동할 뷰 컨트롤러" {
viewController.name = "전달 데이터"
}
}
}
하위
// 하위 ViewController
class SuguePushViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
// 상위에서 받아올 변수
var name: String?
override func viewDidLoad() {
super.viewDidLoad()
if let name = name {
// 받아온 변수를 label의 내용으로
self.nameLabel.text = name
}
}
@IBAction func tapBackButton(_ sender: UIButton) {
// 이전 화면으로 이동
self.navigationController?.popViewController(animated: true)
}
}
반응형
'iOS > UIKit' 카테고리의 다른 글
[IOS] UIButton의 text를 가져와 사용하기 (0) | 2022.02.01 |
---|---|
[IOS] @IBDesignable , @IBInspectable (0) | 2022.02.01 |
[IOS] 화면(ViewController)간 데이터 주고 받기 1 하위->상위 (0) | 2022.01.31 |
[IOS] View life cycle (라이프 사이클) (0) | 2022.01.30 |
[IOS]스토리보드 NavigationController 화면 전환 (0) | 2022.01.30 |