【发布时间】:2019-01-01 18:34:32
【问题描述】:
我在这里搜索了答案,但找不到与我完全相同的问题,请帮我解决一下。
问题是,当我创建一个单独的视图并尝试使用故事板和导航视图控制器制作一个转场时,转场本身可以正常工作,但是
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
不会被调用。为了让我的示例尽可能地少,我制作了一个玩具应用程序来展示正在发生的事情。
Segue is made with ctrl + SecondViewController, identifier is set.
Custom class for SecondViewController is set.
视图控制器具有以下实现:
主视图控制器设置唯一按钮的标题:
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button.setTitle("Awesome title", for: .normal)
}
}
按下按钮时,标签将根据按钮的标题进行更新:
class SecondViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
print("SecondViewController viewDidLoad method")
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print(print("SecondViewController prepare method"))
if let text = (sender as? UIButton)?.titleLabel?.text {
label.text = text
}
}
}
我故意放了两个打印语句来表明viewDidLoad实际上被调用了,而不是prepare。
Here is a gif showing how the app works. 您可能会看到第二个视图上的标签也没有更新。
我也试过设置seguethis way,然后创建@IBAction函数并手动调用performSegue:
@IBAction func onButton(_ sender: UIButton) {
performSegue(withIdentifier: "Id", sender: self)
}
请帮助我理解和解决问题。谢谢。
【问题讨论】:
标签: navigation segue xcode10 swift4.2