有没有办法在进入前台时强制全局刷新视图?

时间:2017-08-24 16:05:22

标签: ios swift

我的用户界面每天都会在特定时间进行彻底的换色。为了解决这个问题,我创建了一个UIColor extension,并在每种颜色上添加switch,以打开客户端当前的本地时间。因此,无论何时视图调用颜色,它都会根据一天中的时间使用适当的颜色。这是一个例子:

UIColor扩展程序

// text color
public class var text: UIColor {
    switch currentHour {
    case 0...5, 20...23: // from 8 PM to 5:59 AM
        return UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1)
    default: // from 6 AM to 7:59 PM
        return UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1)
    }
}

除了在应用启动时更新应用代理中的currentHour,它还会在应用进入前台时更新它:

在app delegate

func applicationWillEnterForeground(_ application: UIApplication) {

    // update current hour
    updateCurrentHour()

}

唯一缺少的是当应用程序进入前景时强制刷新整个视图控制器,以便其中的视图被强制调用UIColor并获得适当的颜色。

  1. 如何强制视图控制器刷新"它的整个观点?或者有没有办法强制刷新仅调用UIColor的视图(因为它们是唯一需要颜色更新的对象)?

  2. 如果用户深入导航堆栈,则将应用程序置于后台然后进入前台,并且该视图控制器(位于堆栈顶部)已成功刷新,当用户弹出时会发生什么回到堆栈?这些视图控制器是否刷新了?

  3. 或者有没有办法强制进行全球刷新"那不会失去用户在筹码中的位置吗?

1 个答案:

答案 0 :(得分:3)

让视图控制器注册此通知:https://developer.apple.com/documentation/foundation/nsnotification.name/1622944-uiapplicationwillenterforeground。通知到达后,刷新。

如果视频控制器在收到通知时刷新并且在viewDidLoad中获得正确的颜色,则表示您已涵盖所有可能的情况。用户所见过的所有视图控制器都具有正确的颜色。

您可能还想从一些正在观看时钟的中心位置(即应用代表)自己发出此通知,这样即使应用程序在此时打开,您也会在到达时刻时刷新。