티스토리 뷰
view에서 다른 view로 전환하면서 데이터를 전달할 때 prepare을 사용하는데
prepare을 알아보겠습니다.
일단 스토리보드는 다음과 같이 만들어 놓았습니다.
performSegue(withIdentifier:sender:)
func performSegue(withIdentifier identifier: String,
sender: Any?)
segue를 실행할 때 사용합니다.
저는 버튼을 누를 때 segue를 실행하겠습니다.
@IBAction func toNavi(_ sender: Any) {
performSegue(withIdentifier: "navi", sender: nil)
}
@IBAction func toBasic(_ sender: Any) {
performSegue(withIdentifier: "normal", sender: nil)
}
prepare(for:sender:)
func prepare(for segue: UIStoryboardSegue,
sender: Any?)
segue가 실행되기 전에 준비할 내용은 이 메서드에 작성합니다.
message = "Success"를 전달하겠습니다.
class ViewController: UIViewController {
let message = "Success"
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func toNavi(_ sender: Any) {
performSegue(withIdentifier: "navi", sender: nil)
}
@IBAction func toBasic(_ sender: Any) {
performSegue(withIdentifier: "normal", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "navi" {
if let vc = segue.destination as? NaviViewController {
vc.message = message
}
} else if segue.identifier == "normal" {
if let vc = segue.destination as? NormalViewController {
vc.message = message
}
}
}
}
받는 쪽
class NaviViewController: UIViewController {
var message = "nil"
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = message
}
}
class NormalViewController: UIViewController {
var message = "nil"
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = message
}
}
결과
NavigationController에 imbed한 view는 performSegue는 되는데 prepare이 되지 않습니다.
NaviViewController 배경색은 노란색이죠.
앞에서 설정한 segue는 첫번째 ViewController에서 NavigationController로 가게되어있습니다.
그래서 prepare을 조금 수정해줘야합니다.
아래와 같이 수정해주세요.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "navi" {
if let target = segue.destination as? UINavigationController, let vc = target.topViewController as? NaviViewController {
vc.message = message
}
} else if segue.identifier == "normal" {
if let vc = segue.destination as? NormalViewController {
vc.message = message
}
}
}
이제 message가 제대로 나옵니다!!
'iOS' 카테고리의 다른 글
[iOS] info.plist란? (0) | 2020.12.28 |
---|---|
[iOS] iOS14+ 위젯 최신화하기 번역 (0) | 2020.12.07 |
[iOS] TableViewCell CollectionViewCell 재사용 문제 (0) | 2020.11.20 |
[iOS] Swift CollectionViewCell Size 컬렉션뷰 셀 사이즈 (0) | 2020.11.20 |
[iOS] Swift UNUserNotificationCenter 특정 시간에 알림, 로컬노티 보내기, Date()를 DateComponents로 변환 (0) | 2020.11.19 |
댓글
공지사항