UIStateRestoration
2019-02-11 15:48 法子 阅读(578) 评论(0) 编辑 收藏 举报用户把app切换到后台,内存原因或过段时间后,IOS系统选择关闭掉应用。UIStateRestoration可以恢复页面状态,让用户没有察觉到App在后台被IOS杀掉了。
(用户正常关闭App的时候,状态恢复是不起作用的)
1.AppDelegate.swift
//返回true,则需要恢复状态的页面才会调用系统函数- (void) encodeRestorableStateWithCoder:(NSCoder *)coder func application(_ application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool { return true } //返回true,则需要恢复状态的页面才会调用系统函数- (void) decodeRestorableStateWithCoder:(NSCoder *)coder func application(_ application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool { return true }
2.页面UI恢复。
只是Storyboard页面恢复,不包含数据。需要为要恢复的页面设置Restoration ID。(如果要恢复状态的页面是多层页面中的一个,例如push或show多层,该页面下面的页面不设置,将影响本页面不能恢复状态;该页面上面的不设置,则即使在上层页面退到后台,也最多恢复到本页面)
3.数据恢复。
重写系统函数,存储并恢复数据,然后刷新UI。
若不重写这两个函数,只会恢复成Storyboard里的UI界面,而不能有数据的存储与恢复。
//存储数据,进入后台调用 override func encodeRestorableState(with coder: NSCoder) { super.encodeRestorableState(with: coder) coder.encode(self.restoreLabel.text, forKey: "RestoreKey") } //恢复数据,回到前台调用 override func decodeRestorableState(with coder: NSCoder) { super.decodeRestorableState(with: coder) if let string = coder.decodeObject(forKey: "RestoreKey") as? String { self.restoreLabel.text = string } }
4.测试。
运行->跳转到该页面->修改lable的文字->退到后台->结束调试->重新运行->直接进入到该页面,label的文字为上次修改的文字。