1

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

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

首选 Swift 解决方案。谢谢!

4

2 回答 2

1

在用户使用这样的功能进行更改后,我经常更新UI。这非常简单,您只需在 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
       }
}

希望有帮助!

顺便说一句,您是否试图随时更改语言?如果是这样,我可以告诉你如何做到这一点。如果没有,如果我理解你的问题,这应该有效。

于 2015-08-13T06:55:44.777 回答
0

好吧,您可以为您的场景使用本地通知。

例如,当用户完成更改并按下按钮接受更改时,您可以发布本地通知以重新加载数据。您可以在所有 viewController 中收听该通知并在那里重新加载数据,就像如果它是一个表格视图,那么您可以简单地调用 tableview 上的 reloadData 方法来实现它。

于 2015-08-13T06:51:17.497 回答