ViewDidAppear 不会自动调用
ViewDidAppear not called automatically
我有一个 HomeViewController
正在使用 segue 打开一个 WelcomeViewController
并且来自类型 Sheet.
在 WelcomeViewController
中,用户正在输入信息,然后关闭(关闭)它。 WelcomeViewController
关闭后,我想通过更改 TextField
.
的 String
值来更新 HomeViewController
问题是,HomeViewController
中的 ViewDidAppear
在关闭 WelcomeViewController
后没有被调用。我之前在为 iOS.
开发时没有遇到过这个问题
我该如何解决这个问题?我尝试手动调用它但遇到了问题,因为我的 IBOutlets
设置为 nil 并且我无法更改 TextField
.
中的文本
这是调用 segue 的代码:
self.performSegue(withIdentifier: "welcome", sender: self)
这是我在 HomeViewController
中的 viewDidAppear
:
override func viewDidAppear() {
super.viewDidAppear()
if (CoreDataAccess().countUsers() == 0) {
self.performSegue(withIdentifier: "welcome", sender: self)
} else {
//continue execution..
}
}
在 WelcomeViewController
中,我使用此代码关闭 ViewController
dismiss(self)
将您的代码添加到 ViewWillAppear() 而不是 ViewDidAppear()。
或者您在关闭 WelcomeViewcontroller 时调用 HomeViewController 中的方法
dismiss(animated: true) {
self.presentedViewController.myMethod()
}
这就是我使用 delegate
解决问题的方法。
感谢@ullstrm 的建议。
首先我将此协议添加到 HomeViewController
protocol WelcomeDelegate {
func insertData(_ name: String, birthday: Date)
}
然后这个prepare(for segue:)
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if let destinationViewController = segue.destinationController as? WelcomeViewController {
destinationViewController.delegate = self
}
}
还有底部的这个扩展(我知道手动调用 viewDidAppear 是不行的,但现在可以)
extension HomeViewController : WelcomeDelegate {
func insertData(_ name: String, birthday: Date) {
viewDidAppear()
}
}
然后在WelcomeViewController
我添加了这个变量
var delegate:WelcomeDelegate? = nil
这行就在 dismiss(self)
之前
self.delegate?.insertData(tfName.stringValue, birthday: dpAge.dateValue)
我有一个 HomeViewController
正在使用 segue 打开一个 WelcomeViewController
并且来自类型 Sheet.
在 WelcomeViewController
中,用户正在输入信息,然后关闭(关闭)它。 WelcomeViewController
关闭后,我想通过更改 TextField
.
String
值来更新 HomeViewController
问题是,HomeViewController
中的 ViewDidAppear
在关闭 WelcomeViewController
后没有被调用。我之前在为 iOS.
我该如何解决这个问题?我尝试手动调用它但遇到了问题,因为我的 IBOutlets
设置为 nil 并且我无法更改 TextField
.
这是调用 segue 的代码:
self.performSegue(withIdentifier: "welcome", sender: self)
这是我在 HomeViewController
中的 viewDidAppear
:
override func viewDidAppear() {
super.viewDidAppear()
if (CoreDataAccess().countUsers() == 0) {
self.performSegue(withIdentifier: "welcome", sender: self)
} else {
//continue execution..
}
}
在 WelcomeViewController
中,我使用此代码关闭 ViewController
dismiss(self)
将您的代码添加到 ViewWillAppear() 而不是 ViewDidAppear()。
或者您在关闭 WelcomeViewcontroller 时调用 HomeViewController 中的方法
dismiss(animated: true) {
self.presentedViewController.myMethod()
}
这就是我使用 delegate
解决问题的方法。
感谢@ullstrm 的建议。
首先我将此协议添加到 HomeViewController
protocol WelcomeDelegate {
func insertData(_ name: String, birthday: Date)
}
然后这个prepare(for segue:)
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if let destinationViewController = segue.destinationController as? WelcomeViewController {
destinationViewController.delegate = self
}
}
还有底部的这个扩展(我知道手动调用 viewDidAppear 是不行的,但现在可以)
extension HomeViewController : WelcomeDelegate {
func insertData(_ name: String, birthday: Date) {
viewDidAppear()
}
}
然后在WelcomeViewController
我添加了这个变量
var delegate:WelcomeDelegate? = nil
这行就在 dismiss(self)
self.delegate?.insertData(tfName.stringValue, birthday: dpAge.dateValue)