【问题标题】:iOS Swift - Refreshing entire application after button pressiOS Swift - 按下按钮后刷新整个应用程序
【发布时间】:2015-11-05 23:09:28
【问题描述】:

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

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

首选 Swift 解决方案。谢谢!

【问题讨论】:

  • 始终从数据存储(存储这些用户偏好的位置)加载数据并从 viewWillAppear 调用数据显示方法
  • 您是否认为使用viewWillAppear 加载数据会影响我的应用程序的性能,因为它会经常调用?

标签: ios swift refresh segue unwind-segue


【解决方案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
       }
}

希望对您有所帮助!

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多