zoukankan      html  css  js  c++  java
  • 使用搜索栏过滤collectionView(按照首字母)

    1.解析json数据
     
     
    NSDictionary *citiesDic = [CoreJSONSerialization coreJSONSerialization:@"cities"];
    NSDictionary *infor = [citiesDic objectForKey:@"infor"];
    NSArray *listItems = [infor objectForKey:@"listItems"]; 
     
    2.存储数据  
    for (NSDictionary *dic in listItems) {
            // 存储数据到model中去
            CityModel *model = [[CityModel alloc] init];
            model.name = [dic objectForKey:@"name”];//城市名
            model.charindex = [dic ·objectForKey:@"charindex”];//城市名首字母
     
            //把城市名首字母组成数组(城市名首字母在下面要作为字典的key)
    NSMutableArray *charIndexArray = [_cityDicForCharIndex objectForKey:model.charindex];//_cityDicForCharIndex是以首字母为key,以 对应该key值的所有的model组成的数组 作为value 的字典
     
            if (!charIndexArray) {//本次for循环对应的首字母(model.charindex) 它对应的value值不存在
               
                // 如果不存在就要初始化城区数据要存储的对应的数组
                charIndexArray = [[NSMutableArray alloc] init];
               
                [charIndexArray addObject:model];
               
                // 还要要存储的对应的数组写入到字典
                [_cityDicForCharIndex setValue:charIndexArray forKey:model.charindex];
               
            }else {//如果存在,就直接往value数组中添加数据
           
                [charIndexArray 3addObject:model];
            }
           
    [_citiesList addObject:model];//所有model都存放在这个数组
    }                                                                                                                                                                                                                                                              
    3.数据排序(按首字母排序)
    NSArray *keyArray = [_cityDicForCharIndex allKeys];//_cityDicForCharIndex字典里所有的key值
     
    NSArray *resultArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
       
            NSComparisonResult result = [obj1 compare:obj2 options:NSCaseInsensitiveSearch];//NSCaseInsensitiveSearch不区分大小写
           
            return result;//排完序的key值数组
           
        }];
     
    4.数据传递
    [_charArray addObjectsFromArray:resultArray]; //存放所有的key值(已排序)
     [_searchCities addObjectsFromArray:_citiesList];//搜索栏过滤出来的数组 (默认显示所有的城市)
     
    // 数据传递
    _citiesCollectionView.charArray = _charArray; //传递key值给CollectionView
    _citiesCollectionView.cityDic = _cityDicForCharIndex; //传递字典给CollectionView
     
    5.初始化搜索栏
     
    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 64, kScreenW, 44)];
    searchBar.delegate = self;// 代理要实现<UISearchBarDelegate>协议
    searchBar.searchBarStyle = UISearchBarStyleProminent;//搜索栏的风格
    searchBar.showsCancelButton = YES;//显示取消按钮
    searchBar.placeholder = @"搜索城市";//默认的显示文本
    [self.view addSubview:searchBar];
     
    6.在搜索栏的代理方法中实现tableView的过滤
    // (1)开始编辑搜索内容
    - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
        [searchBar becomeFirstResponder];// 显示键盘(第一响应者)
        // 保证搜索的标示图刚刚显示时  加载所有的数据为全部的城市名
       
    // 重新进行数据传递
    _citiesCollectionView.charArray = _charArray; //传递key值给CollectionView
    _citiesCollectionView.cityDic = _cityDicForCharIndex; //传递字典给CollectionView
       
    [_citiesCollectionView reloadData];
       
    }
     
    //(2) 输入搜索文本
    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
        // 刷新数据
    _citiesCollectionView.charArray = @[searchText]; //设置key值数组为输入的值
    NSMutableDictionary *dic =[[NSMutableDictionary alloc]init];
    dic = [_modelDicForCharIndex objectForKey:searchText]; //以searchText值为key的value值(model数组)
     
    [_citiesCollectionView.modelDic setValue:searchText forKey:[_modelDicForCharIndex objectForKey:searchText]]; //设置value值
       
    }
     
    //(3)取消搜索
    - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {

        [searchBar resignFirstResponder];//隐藏键盘
        [searchBar setText:@""];//取消搜索内容
    }

    // (4)结束编辑搜索内容
    - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
     
        [searchBar resignFirstResponder]; //失去第一响应者身份
     
    }
     
     
     
     
     
  • 相关阅读:
    史上最全的正则表达式-匹配中英文、字母和数字
    使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
    装了Yaml 然后代码一运行就报错 YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe.
    mac安装yaml
    如何获取android app的package和Activity
    Original error: No Chromedriver found that can automate Chrome '39.0.0'.
    mac chromedriver安装
    keycode相关方法
    python+appium的物理按键代码
    Python测试Websocket接口
  • 原文地址:https://www.cnblogs.com/zh-li/p/5125284.html
Copyright © 2011-2022 走看看