我有一个名为ChangeViewController
的模态呈现的视图控制器,允许用户更改有关他/她的个人资料的一些信息。用户完成后,按下“接受更改”按钮,我使用展开segue退出ChangeViewController
并返回主屏幕。
在执行此展开segue之前,我是否可以刷新整个应用程序的数据?截至目前,用户修改后主屏幕和其他屏幕上的信息保持不变。仅在应用程序重新启动后才会更新信息。有没有办法以编程方式“重新启动”,以便所有视图控制器都是最新的?更具体地说,有没有办法调用所有视图控制器的viewDidLoad
函数,以便更新它们的数据?
Swift解决方案首选。谢谢!
答案 0 :(得分:1)
我经常在用户使用这样的函数更改后更新。这非常简单,只需在UI更新时调用该函数。
func updateUI() {
// Redraw your labels, update your UIElements, do what you have to do
}
一种可以从模态呈现的ViewController调用此函数而不关闭应用程序的方法是使用委托,因为模式表示不会将旧的ViewController抛出堆栈和堆,委托的工作方式如下:
在您的模态控制器中:
protocol ChangeViewControllerDelegat: class {
func updateUI(sender:UIButton)
}
class ChangeViewController: UIViewController {
weak var delegate: ChangeViewControllerDelegat?
func opChangingUserSettings() {
// Change settings with your code
// tell your ViewController to do it.
delegate?.updateUI()
}
class MainViewController: UIViewController, ExtensionViewControllerDelegate {
func updateUI() {
// Redraw your labels, update your UIElements, do what you have to do
}
}
希望有所帮助!
顺便问一下,你是否试图通过任何机会改变语言?如果是这样,我可以告诉你如何做到这一点。如果没有,如果我理解你的问题,这应该工作。
答案 1 :(得分:0)
好吧,您可以为您的方案使用本地通知。
同样,当用户完成更改并按下按钮接受更改时,您可以发布本地通知以重新加载数据。 您可以在所有viewControllers中监听该通知并在那里重新加载数据,就像它是一个表视图一样,您只需在tableview上调用reloadData方法即可实现它。