ViewDidAppear不会自动调用

时间:2018-11-07 14:25:45

标签: swift macos appkit nsviewcontroller

我有一个HomeViewController正在使用segue打开WelcomeViewController,来自Sheet类型。

用户在WelcomeViewController中输入信息,然后关闭(关闭)它。 WelcomeViewController关闭后,我想通过更改HomeViewController的{​​{1}}值来更新String

问题在于,TextField中的ViewDidAppear在关闭HomeViewController之后没有被调用。在为iOS开发之前,我没有这个问题。

我该如何解决?我尝试手动调用它,但是遇到了问题,因为我的WelcomeViewController设置为nil并且我无法更改IBOutlets中的文本。

这是调用segue的代码:

TextField

这是我在self.performSegue(withIdentifier: "welcome", sender: self) 中的viewDidAppear

HomeViewController

override func viewDidAppear() { super.viewDidAppear() if (CoreDataAccess().countUsers() == 0) { self.performSegue(withIdentifier: "welcome", sender: self) } else { //continue execution.. } } 中,我使用此代码关闭了WelcomeViewController

ViewController

2 个答案:

答案 0 :(得分:1)

这就是我使用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)

答案 1 :(得分:0)

将代码添加到ViewWillAppear()而不是ViewDidAppear()。

或者您在关闭WelcomeViewcontroller时在HomeViewController中调用方法

dismiss(animated: true) {
   self.presentedViewController.myMethod()
}