IOS 6 UI状态保存与恢复

来源:互联网 发布:网络批发服装 编辑:程序博客网 时间:2024/05/16 11:24

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

1、应用程序委托对象;

2、视图控制器;

3、自定义视图;


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


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


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


[objc] view plaincopy
  1. - (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder  
  2. {  
  3.     return YES;  
  4. }  
  5.   
  6. -(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder  
  7. {  
  8.     return YES;  
  9. }  
  10.   
  11. -(void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder  
  12. {  
  13.     [coder encodeFloat:2.0 forKey:@"version"];  
  14. }  
  15.   
  16. -(void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder  
  17. {  
  18.     float version=[coder decodeFloatForKey:@"version"];  
  19.     NSLog(@"last versio==%f",version);  
  20. }  

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
  1. <span style="font-size:18px">-(void)encodeRestorableStateWithCoder:(NSCoder *)coder  
  2. {  
  3.     [super encodeRestorableStateWithCoder:coder];  
  4.     [coder encodeObject:self.textfield.text forKey:@"encodeKey"];  
  5. }  
  6.   
  7. -(void)decodeRestorableStateWithCoder:(NSCoder *)coder  
  8. {  
  9.     [super decodeRestorableStateWithCoder:coder];  
  10.     self.textfield.text=[coder decodeObjectForKey:@"encodeKey"];</span>  
  11. }  


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

encodeRestorableStateWithCoder:方法在保存时调用,[coder encodeObject:self.textfield.text  forKey:@"encodeKey"]是按照指定的键保存文本框的内容;decodeRestorableStateWithCoder:方法在恢复时调用,[coder  deocdeObjectForKey:@"encodeKey"]在恢复文本内容时调用。保存和恢复事实上就是向一个归档文件中 编码和解码的过程。

0 0
原创粉丝点击