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 }
由于编者水平有限,不妥之处在所难免,恳请各个大牛批评指正,提出宝贵建议。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-09 21:14:21