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]; //失去第一响应者身份
     
    }
     
     
     
     
     
  • 相关阅读:
    据说,能找出15个以上的的视力才正常....
    看看用PS来转基因的动物,居然很欢乐!!
    《天引》读书笔记——由新月形面积引发的人类长达2000年的探索。
    练习使用策略模式
    折半查找
    UltraEdit常用配置&搭建Java/C开发环境
    一个操作系统的实现_十分钟完成的操作系统——到这里博客迁移工作圆满结束
    C++中的变量初始化
    LeetCode Range Sum Query
    Peeking Iterator
  • 原文地址:https://www.cnblogs.com/zh-li/p/5125284.html
Copyright © 2011-2022 走看看