iOS Swift - 按下按钮后刷新整个应用程序

时间:2015-08-13 05:59:17

标签: ios swift refresh segue unwind-segue

我有一个名为ChangeViewController的模态呈现的视图控制器,允许用户更改有关他/她的个人资料的一些信息。用户完成后,按下“接受更改”按钮,我使用展开segue退出ChangeViewController并返回主屏幕。

在执行此展开segue之前,我是否可以刷新整个应用程序的数据?截至目前,用户修改后主屏幕和其他屏幕上的信息保持不变。仅在应用程序重新启动后才会更新信息。有没有办法以编程方式“重新启动”,以便所有视图控制器都是最新的?更具体地说,有没有办法调用所有视图控制器的viewDidLoad函数,以便更新它们的数据?

Swift解决方案首选。谢谢!

2 个答案:

答案 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()
}
在你的mainVC

class MainViewController: UIViewController, ExtensionViewControllerDelegate {
       func updateUI() {
        // Redraw your labels, update your UIElements, do what you have to do
       }
}

希望有所帮助!

顺便问一下,你是否试图通过任何机会改变语言?如果是这样,我可以告诉你如何做到这一点。如果没有,如果我理解你的问题,这应该工作。

答案 1 :(得分:0)

好吧,您可以为您的方案使用本地通知。

同样,当用户完成更改并按下按钮接受更改时,您可以发布本地通知以重新加载数据。 您可以在所有viewControllers中监听该通知并在那里重新加载数据,就像它是一个表视图一样,您只需在tableview上调用reloadData方法即可实现它。