`

iOS开发那些事--iOS6 UI状态保持和恢复

阅读更多

iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。

在iOS6中我们可以在3地方实现状态保持和恢复:

 

应用程序委托对象

 

视图控制器

 

自定义视图

 

为了演示这个功能实现,我们把基于故事板的HelloWorld工程改造一下,在画面中添加一个文本框

 

1

 

用户在文本框中输入一些内容,应用程序退出并且终止后再次进来的时候,文本框中还会保持原来输入的内容。然后在IB的Scene中选中View Controller,打开右边的标识检查器,设置Restoration ID(恢复标识)为viewController。

 

 2

 

恢复标识是iOS6为了实现UI状态保持和恢复添加的设置项目。我们还需要在应用程序委托对象AppDelegate代码部分做一些修改,添加的代码如下:

 

-(BOOL) application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder

{

return YES;

}

 

-(BOOL) application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder

{

return YES;

}

 

- (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder

{

[coder encodeFloat:2.0 forKey:@"Version"];

}

 

- (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder

{

float lastVer = [coder decodeFloatForKey:@"Version"];

NSLog(@”lastVer = %f”,lastVer);

}

 

 

其中application:shouldSaveApplicationState:在应用退出的时候调用,负责控制是否允许保存状态,返回YES情况是可以保存,NO是不保存。

 

application:shouldRestoreApplicationState:是应用启动时候调用,负责控制是否恢复上次退出的时候的状态,返回YES情况是可以恢复,NO是不恢复。

 

application:willEncodeRestorableStateWithCoder:方法是保存时候调用,在这个方法中实现UI状态或数据的保存,其中[coder encodeFloat:2.0 forKey:@"Version"]是保存简单数据。

 

application:didDecodeRestorableStateWithCoder:方法是恢复时候调用,在这个方法中实现UI状态或数据的恢复,其中[coder decodeFloatForKey:@"Version"]语句是恢复上次保存的数据。

 

要想实现具体画面中控件的保持和恢复,还需要在它视图控制器中添加一些代码,ViewController.m中添加的代码如下:

 

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder

{

[super encodeRestorableStateWithCoder:coder];

[coder encodeObject:self.txtField.text forKey:kSaveKey];

}

 

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder

{

[super decodeRestorableStateWithCoder:coder];

self.txtField.text = [coder decodeObjectForKey:kSaveKey];

}

 在iOS6之后视图控制器都添加了两个:encodeRestorableStateWithCoder:和 decodeRestorableStateWithCoder:用来实现该控制器中的控件或数据的保存和恢复。其中 encodeRestorableStateWithCoder: 方法是在保存时候调用,[coder encodeObject:self.txtField.text forKey:kSaveKey]语句是按照指定的键保存文本框的内容,decodeRestorableStateWithCoder:方法是在恢复时 候调用,[coder decodeObjectForKey:kSaveKey]是恢复文本框内容时候调用,保存和恢复事实上就是向一个归档文件中编码和解码的过程。

分享到:
评论

相关推荐

    iOS开发进阶篇-成为一个iOS开发高手

    它深入探讨了iOS开发的核心概念和技术,旨在帮助开发者们从初级水平提升到高级专家水平。 首先,这份资料可能涵盖了Swift编程语言的高级特性,包括泛型、协议与扩展、闭包以及Optionals的深度理解。Swift是iOS开发...

    ios-iOS - UI - 01 - 计算器.zip

    在iOS开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和应用程序的受欢迎程度。本压缩包文件“ios-iOS - UI - 01 - 计算器.zip”显然关注的是一个基本但关键的UI组件:计算器。在iOS应用中,...

    iOS开发进阶篇-成为iOS开发高手-源码

    这个源码包“iOS开发进阶篇-成为iOS开发高手”提供了丰富的学习材料,旨在帮助你深入理解iOS开发的核心概念和技术。以下将对这个资源包中的关键知识点进行详细阐述: 1. **Objective-C与Swift的比较**: - ...

    iOS开发 - 第01篇 - UI基础 - 04 - 超级猜图

    在本教程中,我们将深入探讨iOS开发中的UI基础,特别是通过一个名为“超级猜图”的小程序来学习。这个小程序是一个适合初学者的项目,旨在帮助开发者掌握基本的用户界面设计和交互实现。在这个项目的实践中,我们...

    IOS软件开发-Objective-C-UI高级应用.ppt

    在iOS软件开发中,Objective-C是苹果官方支持的编程语言之一,特别用于构建用户界面(UI)和应用程序逻辑。这份“iOS软件开发-Objective-C-UI高级应用.ppt”主要涵盖了在开发过程中如何利用Objective-C实现一些高级...

    iOS开发 - 第02篇 - UI进阶 - 15 - 彩票(第二天)

    8. 状态保存与恢复:如果应用支持后台运行或在不同时间点继续游戏,需要理解如何使用`UserDefaults`或`NSCoding`来保存和恢复用户的游戏状态。 9. 响应式设计:为了让应用适应不同尺寸的屏幕,需要使用Auto Layout...

    IOS源码应用Demo-iphone开发技巧UI篇之实现CheckBox BECheckBox.zip

    在iOS开发中,UI设计是至关重要的一环,它直接影响到用户对应用的体验。本教程主要探讨了如何在iOS应用中实现一个自定义的CheckBox,即`BECheckBox`,这通常是一个开发者在构建用户界面时会遇到的需求。下面将详细...

    iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天)

    在这个“iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天)”的主题中,我们将探讨如何创建一个彩票应用的用户界面,这涉及到一系列与iOS界面设计和技术相关的知识点。 首先,彩票应用通常涉及到动态更新的数字展示,...

    iOS开发进阶-完整版

    通过以上这些知识点的介绍,《iOS开发进阶》这本书旨在帮助初级开发者快速掌握iOS应用程序开发的核心技术和最佳实践,并能够通过实战项目进一步提升自己的技术水平。无论是对于想要深入了解iOS开发细节的专业人士...

    IOS源码应用Demo-iphone开发技巧UI篇之自定义TabBar CustomTabBar.zip

    在iOS应用开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和产品的吸引力。本资源“IOS源码应用Demo-iphone开发技巧UI篇之自定义TabBar CustomTabBar.zip”聚焦于一个特定的UI组件:自定义...

    swift-ios15-swiftui-sample.pdf

    iOS 15 作为最新的 iOS 版本,带来了许多新的特性和改进,其中 SwiftUI 也得到了进一步的开发和改进。本文档旨在通过实践和示例,以帮助开发者快速上手 Swift 和 SwiftUI,从基础知识到实际应用。 SwiftUI 是 Apple...

    IOS入门 - UI - 关灯游戏 - Demo

    在iOS开发中,我们可以利用Swift语言和UIKit框架来实现这一概念,让初学者对iOS应用的基本架构、UI设计和事件处理有更直观的理解。 首先,我们需要了解Swift语言,它是Apple为iOS、iPadOS、macOS、watchOS和tvOS...

    ios-iOS篇-UI篇-仿今日头条效果父子控制器的应用.zip

    在iOS开发中,UI设计和用户体验是至关重要的部分。这个压缩包文件"ios-iOS篇-UI篇-仿今日头条效果父子控制器的应用.zip"显然提供了一个示例,教你如何在iOS应用中实现类似今日头条的滚动标题效果,即文字渐变和字体...

    iOS开发 - 第02篇 - UI进阶 - 13 - 核心动画

    在iOS开发中,UI设计和交互是至关重要的部分,而核心动画(Core Animation)则是实现这些高级视觉效果的关键技术。本文将深入探讨如何利用核心动画来创建动态、丰富的用户界面,以实现时钟和幸运转盘这样的功能。 ...

    基于Objective-C的QMUI iOS UI开发解决方案设计源码

    这是一个基于Objective-C的QMUI iOS UI开发解决方案设计,使用Objective-C、C、MATLAB和Python语言开发,包含348个文件。主要文件类型包括152个H文件、145个M文件、17个JSON文件、16个PDF文件、4个Markdown文档、3个...

    IOS应用源码Demo-电子书阅读器 - iOS PDF Reader-毕设学习.zip

    总的来说,这个源码示例是一个宝贵的教育资源,可以帮助学习者深入理解iOS应用开发的各个方面,包括UI设计、数据处理、性能优化和软件工程实践。尽管技术在不断更新,但基础知识和编程原理依然适用,因此这个项目...

    iOS开发 - 第01篇 - UI基础 - 03 - 应用程序管理

    本篇文章将深入探讨“iOS开发 - 第01篇 - UI基础 - 03 - 应用程序管理”这一主题,通过一个简单的示例程序帮助初学者理解应用程序生命周期、启动过程以及状态管理。 首先,我们需要了解iOS应用的基本结构。每个iOS...

Global site tag (gtag.js) - Google Analytics