iOS開發那些事--iOS6 UI狀態保持和恢複

來源:互聯網
上載者:User

iOS設計規範中要求,當應用退出的時候(包括被終止運行時候),畫面中UI元素狀態需要保持的,當再次進來的時候看狀態與退出是一樣的。iOS6之後蘋果提供以下API使得UI狀態保持和恢複變得很容易了。 在iOS6中我們可以在3地方實現狀態保持和恢複: 應用程式委派物件 視圖控制器 自訂視圖 為了示範這個功能實現,我們把基於故事板的HelloWorld工程改造一下,在畫面中添加一個文字框  使用者在文字框中輸入一些內容,應用程式退出並且終止後再次進來的時候,文字框中還會保持原來輸入的內容。然後在IB的Scene中選中View Controller,開啟右邊的標識檢查器,設定Restoration ID(恢複標識)為viewController。  恢複標識是iOS6為了實現UI狀態保持和恢複添加的設定項目。我們還需要在應用程式委派物件AppDelegate代碼部分做一些修改,添加的代碼如下: [cpp] -(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);    }   -(BOOL) application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder { return YES; }   -(BOOL) application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder { return YES; }   - (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coderwww.2cto.com{ [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中添加的代碼如下: [cpp] -(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];    }   -(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]是恢複文字框內容時候調用,儲存和恢複事實上就是向一個歸檔檔案中編碼和解碼的過程。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.