您的位置:首页 > 产品设计 > UI/UE

IOS 6 UI状态保存与恢复

2014-10-21 21:33 393 查看
在IOS6中,apple提供了一些API使得UI状态保持和恢复变得很容易。我们可以在以下三个地方实现状态保持和恢复:

1、应用程序委托对象;

2、视图控制器;

3、自定义视图;

为了测试这个功能,我们定义一个简单的界面(一个UILabel和一个UITextField),测试保持和恢复textfield中的内容。

首先在Interface Builder的Scene中选中View Controller,打开标识检查器,设置Restoration ID(恢复标识)为viewController。恢复标识是IOS6为了实现UI状态保持和恢复添加的设置项目。

其次,还需要在AppDelegate中做一些修改,代码如下:

[objc] view
plaincopy

- (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 version=[coder decodeFloatForKey:@"version"];

NSLog(@"last versio==%f",version);

}

application:shouldSaveApplicationState:方法在应用退出时调用,负责控制是否允许保存状态,返回YES表示保存,NO表示不保存。

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

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

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

上面是在AppDelegate中保存数据的方法,要想实现具体界面中控件的保持和恢复,还需要在它的视图控制器中做一些事情。我们在ViewController.m中添加以下代码:

[objc] view
plaincopy

<span style="font-size:18px">-(void)encodeRestorableStateWithCoder:(NSCoder *)coder

{

[super encodeRestorableStateWithCoder:coder];

[coder encodeObject:self.textfield.text forKey:@"encodeKey"];

}

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder

{

[super decodeRestorableStateWithCoder:coder];

self.textfield.text=[coder decodeObjectForKey:@"encodeKey"];</span>

}

在IOS6之后,视图控制器都添加了两个方法——encodeRestorableStateWithCoder:和decodeRestorableStateWithCoder:,用来实现该视图控制器中控件或数据的保存和恢复。

encodeRestorableStateWithCoder:方法在保存时调用,[coder encodeObject:self.textfield.text forKey:@"encodeKey"]是按照指定的键保存文本框的内容;decodeRestorableStateWithCoder:方法在恢复时调用,[coder deocdeObjectForKey:@"encodeKey"]在恢复文本内容时调用。保存和恢复事实上就是向一个归档文件中
编码和解码的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: