博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios实现城市选择功能(searchBar和tableView)
阅读量:5874 次
发布时间:2019-06-19

本文共 2208 字,大约阅读时间需要 7 分钟。

  hot3.png

这几天做了一个通过UISearchBar和UITableView实现城市选择的功能。

主要参考了

   和 (PS:非常感谢这些大神的分享,使我收益良多);

这是我自己做的demo:


这里代码我只展示一部分,因为很简单就不一一展示。

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{    if (searchText != nil && searchText.length > 0) {            searchText = [searchText uppercaseString];// 转成大写,indexArray存储大写字母,所以输入小写内容无法判断                //if里是判断当前searchText是否在已有的首字大写集合里,之所以用[ChineseString IndexArray:dataList]是当连续输入两个字母比如“aa”时,显示结果为空,这时indexArray和LetterResultArr都被置空        if ([[ChineseString IndexArray:dataList] indexOfObject:searchText] !=NSNotFound) {                        //1.当searchText的内容“aa”时,显示结果为空,去掉一个“a”,searchText的内容为“a”,这时tableView应该再显示首字母为a的所用内容,这是我们最终想要的结果。            //2.由于之前的“aa”,indexArray和LetterResultArr都为空,所以通过[self.LetterResultArr count] == 0作为判断条件 重新初始化数据            if ([self.LetterResultArr count] == 0) {                self.LetterResultArr = [ChineseString LetterSortArray:dataList];                self.indexArray = [ChineseString IndexArray:dataList];            }                        NSInteger index = [self.indexArray indexOfObject:searchText];            self.showData = LetterResultArr ;            self.LetterResultArr = [NSMutableArray array];            self.indexArray = [NSMutableArray array];            [self.LetterResultArr addObject: [self.showData objectAtIndex:index]];                        [self.indexArray addObject:@""];//不让右边输出searchText的内容            [tableView reloadData];                    } else {            self.LetterResultArr = [NSMutableArray array];            self.indexArray = [NSMutableArray array];            [tableView reloadData];        }    }else{        //当前else:去掉searchText的内容时,tableView重新显示所有数据                self.indexArray = [ChineseString IndexArray:dataList];        self.LetterResultArr = [ChineseString LetterSortArray:dataList];        [tableView reloadData];           }    }

      之前有一个地方纠结很久,就是[tableView reloadData],虽然知道它是用来重载tableview,但是不知道它怎么来实现的,后来琢磨一下,它就是重新执行一遍UITableViewDelegate和UItableViewDataSource协议所重写的方法,所以这个过程中协议方法中所用到的self.indexArray和self.LetterResultArr都要重新赋值。

这里给自己做的过程中稍微总结下,作为一名刚入门ios的菜鸟,自然有很多地方不是特别了解,有时候不懂还是要多看下api并且多去敲代码,一直坚信以项目来学习效果最佳。

转载于:https://my.oschina.net/coolcq/blog/496065

你可能感兴趣的文章
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
apt-get 命令加 autoclean clean autoremove 区别
查看>>
Docs-->.NET-->API reference-->System.Web.UI.WebControls-->Repeater
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
開始新的征程
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
看雪CTF第十四题
查看>>
模拟生命_吸烟致癌?
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>