iOS-NSDictionary/NSMutableDictionary新用法之“是”與”否“,開關控制器,NSUserDefaults 簡單開關應用。,iosnsuserdefaults
iAronTalk Blog opens.
Not matter of the today will drag tomorrow.
-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
NSDictionary(字典)是Objective-C中用於"集合"資料,它可以將資料以索引值對兒的形式儲存起來,取值的時候通過KEY就可以直接拿到對應的值,非常方便。同一個詞典對象中可以儲存多個不同類型的資料,不像Java與C 只能儲存聲明的相同類型的資料。
眾所周知的NSDictionary是個承裝資料的匣子,而”它“還是switch(開關),下面就讓我們來看看它如何發揮自身的特性成為一個”開關“。下面通過一個例子來呈現NSDictionary的”開關“特性,需要說明的是,字典初始化NSDictionary *switchDic = [[NSDictionary alloc] init];,在不給設定初值前,字典內容為空白。
參照本文思想很多關鍵字都可以完成開關功能,例如NSUserDefault,相比大家都還知道每款App初次使用的動畫(滑動視圖),在第二次使用的App的時候不翼而飛了,該功能即可用此思想實現,請看”報道“。
下面是例1:(應用背景:評論欄的收齊和展開)
#import "BaseViewController.h"@interface TopDetailViewController : BaseViewController<UITableViewDataSource,UITableViewDelegate>{ UITableView *_tableView;//評論欄的表視圖 NSMutableDictionary *_foldSwitch;//定義的收齊展開開關}@end
@implementation TopDetailViewController- (void)viewDidLoad { [super viewDidLoad]; _foldSwitch = [[NSMutableDictionary alloc]init];}#pragma mark - 選中儲存格展開儲存格- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSString *key = [NSString stringWithFormat:@"%d",indexPath.row];//把選中的儲存格下標作為字典的一個key BOOL isShow = [[_foldSwitch objectForKey:key]boolValue]; ;//建立的字典為空白,isShow為NO. [_foldSwitch setObject:@(!isShow) forKey:key];//選中儲存格後,改變_foldSwitch的狀態,此時選中儲存格下標key對應的value為:@(YES). //此行代碼尤為重要,重新整理選中的那行儲存格,才會調用下面的方法。 [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }#pragma -mark -表視圖設定儲存格高度調用的方法- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ //擷取當前選中的儲存格下標,作為字典的key或許對應的值,由於在上一個協議方法中我們將_foldSwitch中key對應的value設為:@(YES),故此時isSshow為YES NSString *key = [NSString stringWithFormat:@"%i",indexPath.row]; BOOL isShow = [[_foldSwitch objectForKey:key]boolValue]; if (isShow == YES) { //這裡填寫展開的相關代碼 }else{ //這裡填寫收齊的相關代碼 }}@end
例2:(應用情境:首次使用App,開機動畫的一次性顯示,以後開啟App,動畫不在顯示)
1 #import "RootTabBarController.h" 2 3 @implementation RootTabBarController 4 5 //建立小資料的本機存放區對象 6 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 7 //擷取當前是否為第一次啟動,若為第一次啟動,firstInit為NO. 8 BOOL firstInit = [[userDefaults objectForKey:@"firstInit"]boolValue]; 9 if (firstInit == NO) {10 [self _initFirstView];//載入動畫方法11 //改變firstInit的值為YES,今後不在載入動畫。12 [userDefaults setObject:@YES forKey:@"firstInit"];13 //建議同步儲存到磁碟中,但不是必須14 [userDefaults synchronize];15 }
由於編者水平有限,不妥之處在所難免,懇請各個大牛批評指正,提出寶貴建議。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。