• iOS-NSDictionary/NSMutableDictionary新用法之“是”与”否“,开关控制器,NSUserDefaults 简单开关应用。


      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        }

      由于编者水平有限,不妥之处在所难免,恳请各个大牛批评指正,提出宝贵建议。

      版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    pytest.mark.parametrize里面indirect参数详细解释
    linux环境安装python环境
    gitlab怎么给别人新增项目权限
    VMware虚拟机下的CentOS7如果Ping不通百度,解决办法
    ip configuration could not be reserved (no available address timeout etc.)虚拟机连接不上网卡解决办法
    虚拟机安装教程
    auto_now与auto_now_add之间的区别
    【二分答案】洛谷P2678 [NOIP2015 提高组] 跳石头/P1824 进击的奶牛/P2440木材加工/P1873 砍树
    团体程序设计天梯赛PTA L2-021点赞狂魔
    团体程序设计天梯赛PTA L2-020功夫传人
  • 原文地址:https://www.cnblogs.com/iAronTalk/p/4771184.html
Copyright © 2020-2023  润新知