【发布时间】:2021-05-13 19:00:21
【问题描述】:
目前,我的导航堆栈中有三个视图控制器。
在第一个 VC 中,我使用一个选择器视图来选择一个时间,然后我使用一个按钮将“pickedTime var”传递给第二个 VC。在第二个 VC 中,我成功地使用了“pickedTime var”在屏幕上显示了选择的时间。
在尝试将“pickedTime var”再次传递给第三个 VC 后,我遇到了一个问题。尽管加载了第三个屏幕,但“pickedTime var”在屏幕上显示 0 而不是pickedTime。
第一个 VC 代码:
// Holds pickedTime from UIPickerView
var pickedTime = Int()
// Segue to second screen
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showSecondScreen" {
let controller = segue.destination as! SecondViewController
controller.pickedTime = pickedTime
}
}
第二个 VC 代码:
// Holds pickedTime passed from first VC
var pickedTime: Int()
// Show pickedTime in label
override func viewDidLoad() {
super.viewDidLoad()
pickedTimeLabel.text = "\(pickedTime)" // shows 60
}
// Segue to pop-up screen or third screen
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueToPopUp" {
let controller = segue.destination as! PopUpViewController
...
} else if let controller = segue.destination as? ThirdViewController {
controller.pickedTime = pickedTime
}
}
第三个 VC 代码
// Holds pickedTime passed from second VC
var pickedTime: Int()
// Show pickedTime in label
override func viewDidLoad() {
super.viewDidLoad()
pickedTimeLabel.text = "\(pickedTime)" // shows 0
}
【问题讨论】:
-
两个想法。首先,你确定
controller.pickedTime = pickedTime被执行了吗?更多,你为什么在任何 ZVC 中使用var pickedTime: Int()- 意思是两者 - 当你实际提供/传递它时?
标签: ios swift uinavigationcontroller uistoryboardsegue