使用搜索欄過濾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]; //失去第一響應者身份
}

轉載于:https://www.cnblogs.com/zh-li/p/5125284.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375182.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《哪來的天才?練習中的平凡與偉大》

這是一本堪稱論述所有偉大成就來源的書中最讓我覺得激動人心、非常棒的一本書。 什么成就了一個那些所謂的天才&#xff1f;刻意練習&#xff01;偉大的成就不是因為所謂天生的基因&#xff0c;也不是所謂簡單的埋頭苦干。而是需要長時間有針對性的刻意提高自己某個方面能力的艱…

8086變址和指針寄存器

SI和DI稱為變址寄存器,在字符串操作中SI作為源指針,DI作為目的指針(ES:DI<--DS:SI) ;用作存儲器指針時可用于尋址 DS:[SI],DS:[BXDI]BP和SP稱為指針寄存器,BP稱為基址針,SP為堆棧指針 ;BP也可作為存儲器指針DS:[bpsi],如果沒有段前綴那么BP最為堆棧基址[BP]尋址的是堆棧內存…

R軟件中 文本分析安裝包 Rjava 和 Rwordseg 傻瓜式安裝方法四部曲

這兩天&#xff0c;由于要做一個文本分析的內容&#xff0c;所以搜索了一天R語言中的可以做文本分析的加載包&#xff0c;但是在安裝包的過程&#xff0c;真是被虐千百遍&#xff0c;總是安裝不成功。特此專門寫一篇博文&#xff0c;把整個心塞史暢快的釋放一下。 ------------…

省賽之路第一天

今天是清明假期第一天&#xff0c;原定的到洛陽玩也成為了虛無縹緲的東東了吧&#xff0c;cb這位還有說的太對了&#xff0c;no game&#xff0c;no girlfriend&#xff0c;no holiday&#xff0c;only maching&#xff01;這都不是什么大事&#xff0c;畢竟自認為還是個肯吃苦…

8086標志寄存器FLAG

8086CPU提供一個特殊的寄存器稱為標志寄存器,里面包含9個標志,用來反映處理器的狀態和運算結果的某些特征。FLAG是按位起作用的

Windows下安裝Python數據庫模塊--MySQLdb

## 1、下載MySQLdb [去官網](http://pypi.python.org/pypi/MySQL-python/) 下載對應的編譯好的版本&#xff08;現在官網最新版本為1.2.5&#xff09;&#xff1a; MySQL-python-1.2.5.win32-py2.7.exe 得到1MB的安裝文件 MySQL-python-1.2.5.win32-py2.7.exe ## 2、安裝 以…

MSSQL-字符串分離與列記錄合并成一行混合使用

一般我們在數據庫的表字段存儲字典Id&#xff0c;如果有多個的話一般是用,或分隔符分隔(12,14),列表顯示的時候是顯示字典名,那如果要在數據庫將字典Id轉成用戶看得懂的字典名&#xff0c;該怎么辦呢&#xff1f; 我們這時候可以結合之前說到的 字符串分離(Split函數) 和 列記錄…

邏輯運算 或,與,非

邏輯變量之間的運算稱為邏輯運算。二進制數1和0在邏輯上可以代表“真”與“假”、“是”與“否”、“有”與“無”。這種具有邏輯屬性的變量就稱為邏輯變量。 計算機的邏輯運算的算術運算的主要區別是&#xff1a;邏輯運算是按位進行的&#xff0c;位與位之間不像加減運算…

Java 理解CPU緩存(CPU Cache)

從Java視角理解系統結構連載, 關注我的微博(鏈接)了解最新動態 眾所周知, CPU是計算機的大腦, 它負責執行程序的指令; 內存負責存數據, 包括程序自身數據. 同樣大家都知道, 內存比CPU慢很多. 其實在30年前, CPU的頻率和內存總線的頻率在同一個級別, 訪問內存只比訪問CPU寄存器慢…

測試指令TEST

測試指令TESTTEST OPRD1,OPRD2 ;按位與操作,但不保存結果,僅影響標志寄存器,根據影響的標志位得到結果 該指令通常用于檢測某些位是否為1,但不改變原操作值.根據ZF得知判斷結果 mov al,01100011B;檢測位6是否為1,如果為1那么ZF0,如果為0那么ZF1 TEST AL,01000000B ;AL010000…

Homebrew OS X 不可或缺的套件管理器

Homebrew OS X 不可或缺的套件管理器,可以說Homebrew就是mac下的apt-get、yum. 1.安裝homebrew brew的安裝很簡單&#xff0c;使用一條ruby命令即可&#xff0c;Mac系統上已經默認安裝了ruby。 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…

【BZOJ】【1003】【ZJOI2006】物流運輸trans

最短路/DP 這題數據規模并不大&#xff01;&#xff01;這是重點……… 所以直接暴力DP就好了&#xff1a;f[i]表示前 i 天的最小花費&#xff0c;則有$f[i]min\{f[j]cost[j1][i]k\} (0\leq j \leq i-1)$其中cost數組表示第L天到第R天只用一種運輸方案連續運$R-L1$天的最小代價…

與操作指令AND

邏輯”與”操作指令AND(邏輯乘法) 0*000*101*001*11 只當參與運算的邏輯變量都同時取值為1時&#xff0c;其邏輯乘積才等于1。 MOV AL,01100011BAND AL,11111110B ;按位根據乘法表計算;結果AL01100010B另一種說法是用”0”來把相應位設置成0MOV AL,01100011B ;把AL的高4位設置成…

SVN-鉤子

先說說鉤子是干什么的吧&#xff0c;&#xff0c;簡單的說&#xff0c;svn鉤子就是在提交svn時前后所要觸發的事件&#xff0c;于是我們可以用鉤子做一些提交時的限制&#xff0c;及提交后的操作。最常用的一般有兩個&#xff0c;pre-commit,post-commit。下面分別簡單說下概念…

數據庫---T-SQL語句(一)

一、T-SQL語句 1.創建表:create table Name(Code varchar(50),) 主鍵&#xff1a;primary key 自增長&#xff1a;auto_increment 外鍵關系&#xff1a;references 非空&#xff1a;not null 2.刪除表&#xff1a;drop table family 3.創建數據庫&#xff1a;creat database…

或操作指令OR

邏輯”或”操作指令OR(邏輯加法) 000011101111 在給定的邏輯變量中&#xff0c;A或B只要有一個為1&#xff0c;其邏輯加的結果為1&#xff1b;兩者都為1則邏輯加為1。 MOV AL,01100011BOR AL,10000000B ;按位根據加法表進行運算;結果AL 11100011B另一種說法是用1將相應位設為1M…

Java學習筆記---繼承和super的用法

自從換了個視頻教學,感覺比原來那個好多了,就是學校網速太渣,好多視頻看一會卡半天,只能先看看已經下載的了. 不過也好,雖然不能從開始開始重新開,但是已經看過一次,在看一次也是好的,就當鞏固學習了. 繼承的關鍵字:extends 格式如下: class 子類名 extends父類名{ ... } 例如 …

html適配Anroid手機

本文全然是翻譯與總結谷歌官方的教程&#xff0c;已確保文檔的正確性。 免得大家被五花八門的其它的資料弄混了&#xff0c;也沒有系統行的學習。 一、設置窗體尺寸和適配屏幕分辨率 谷歌官方文檔提到兩個大的方面。 1.Viewport視圖窗體 這個是html中設置的。主要是設置高度和寬…

算術運算與邏輯運算

邏輯運算又稱布爾運算,取值只有兩個真或假,二進制數1和0在邏輯上可以代表真與假,是與否 算術運算...小學就開始學的了 兩者的區別在與邏輯運算是按位進行的,位與位之間沒有進位或借位.邏輯加法(OR)OR OPRD1,OPRD2 ;OPRD1<--OPRD1 OPRD2 算術加法(ADD)ADD OPRD1,OPRD2 ;O…

Webpack 入門指迷--轉載(題葉)

最近看到這個東西&#xff0c;一頭霧水。看了一些資料了解了Webpack概念&#xff0c;大體是webpack 是一個模塊綁定器&#xff0c;主要目的是在瀏覽器上綁定 JavaScript 文件。 看到題葉寫的一篇介紹&#xff0c;寫的很好&#xff0c;轉載連接http://segmentfault.com/a/119000…