我有一个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
答案 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()
}