日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2025/7/14 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发那些事--iOS6 UI状态保持和恢复 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

iOS設(shè)計規(guī)范中要求,當(dāng)應(yīng)用退出的時候(包括被終止運行時候),畫面中UI元素狀態(tài)需要保持的,當(dāng)再次進(jìn)來的時候看狀態(tài)與退出是一樣的。iOS6之后蘋果提供以下API使得UI狀態(tài)保持和恢復(fù)變得很容易了。

在iOS6中我們可以在3地方實現(xiàn)狀態(tài)保持和恢復(fù):

應(yīng)用程序委托對象

視圖控制器

自定義視圖

為了演示這個功能實現(xiàn),我們把基于故事板的HelloWorld工程改造一下,在畫面中添加一個文本框

用戶在文本框中輸入一些內(nèi)容,應(yīng)用程序退出并且終止后再次進(jìn)來的時候,文本框中還會保持原來輸入的內(nèi)容。然后在IB的Scene中選中View Controller,打開右邊的標(biāo)識檢查器,設(shè)置Restoration ID(恢復(fù)標(biāo)識)為viewController。

?

恢復(fù)標(biāo)識是iOS6為了實現(xiàn)UI狀態(tài)保持和恢復(fù)添加的設(shè)置項目。我們還需要在應(yīng)用程序委托對象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:在應(yīng)用退出的時候調(diào)用,負(fù)責(zé)控制是否允許保存狀態(tài),返回YES情況是可以保存,NO是不保存。

    application:shouldRestoreApplicationState:是應(yīng)用啟動時候調(diào)用,負(fù)責(zé)控制是否恢復(fù)上次退出的時候的狀態(tài),返回YES情況是可以恢復(fù),NO是不恢復(fù)。

    application:willEncodeRestorableStateWithCoder:方法是保存時候調(diào)用,在這個方法中實現(xiàn)UI狀態(tài)或數(shù)據(jù)的保存,其中[coder encodeFloat:2.0 forKey:@"Version"]是保存簡單數(shù)據(jù)。

    application:didDecodeRestorableStateWithCoder:方法是恢復(fù)時候調(diào)用,在這個方法中實現(xiàn)UI狀態(tài)或數(shù)據(jù)的恢復(fù),其中[coder decodeFloatForKey:@"Version"]語句是恢復(fù)上次保存的數(shù)據(jù)。

    要想實現(xiàn)具體畫面中控件的保持和恢復(fù),還需要在它視圖控制器中添加一些代碼,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:用來實現(xiàn)該控制器中的控件或數(shù)據(jù)的保存和恢復(fù)。其中 encodeRestorableStateWithCoder: 方法是在保存時候調(diào)用,[coder encodeObject:self.txtField.text forKey:kSaveKey]語句是按照指定的鍵保存文本框的內(nèi)容,decodeRestorableStateWithCoder:方法是在恢復(fù)時 候調(diào)用,[coder decodeObjectForKey:kSaveKey]是恢復(fù)文本框內(nèi)容時候調(diào)用,保存和恢復(fù)事實上就是向一個歸檔文件中編碼和解碼的過程。

    總結(jié)

    以上是生活随笔為你收集整理的iOS开发那些事--iOS6 UI状态保持和恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。