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)