亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

如何實現IOS_SearchBar搜索欄及關鍵字高亮

2020-07-26 03:16:42
字體:
來源:轉載
供稿:網友

搜索框的效果演示:

這個就是所謂的搜索框了,那么接下來我們看看如何使用代碼來實現這個功能.

我所使用的數據是英雄聯盟的英雄名單,是一個JSON數據的txt文件, JSON數據的處理代碼如下所示:

//獲取文件的路徑pathNSString *path = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"txt"];//將路徑下的文件轉換成NSData數據NSData *data = [NSData dataWithContentsOfFile:path];//將得到的NSdata數據進行JSON解析并返回一個結果數組resultid result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

我們再來看數據的層級關系:


這里解釋下,這個層級關系是通過在線代碼格式化網頁得到的,我們上一步所做的數據處理就是將原始數據進行處理,得到一個結果數組,他的層級關系和格式化后一樣,這樣就可以根據格式化網頁上的層級關系來進一步處理數據,將需要的內容放入數組或者字典(當然也可以直接打印result來看層級關系,看個人習慣).

那么我們所需要的內容就是字典中nick所對應的值,通過遍歷將其取出來放入數組中,這里將這個數組定義為屬性,在其他方法里會用到.

// 將搜索范圍的內容放入數組for (NSDictionary *diction in result) {  [self.arrOfSeachBoxes addObject:diction[@"nick"]]; }

接下來我們創建一個UITableView用來顯示數據,搜索條需要用到的類是UISearchController,先看看如何創建:

系統的注釋說的很清楚,如果想要在當前頁顯示搜索結果,這個方法的參數填nil即可,為了方便起見,聲明一個UISearchController的屬性

@property (nonatomic, retain) UISearchController *searchController;

接下來是創建

// nil表示在當前頁面顯示搜索結果self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

UISearchController頭文件中被放在非常靠前的位置的是一個屬性


根據字面意思我們可以猜到這跟搜索結果的更新有關,就跟tableViewreloadData一個意思.那么很明顯,我們得簽協議<UISearchResultsUpdating>,這個協議中只有一個必須要實現的方法.

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController;

頭文件如下圖所示:

---------這里是美麗的分割線---------

上面已經把所有關于搜索條的類和方法羅列了一下,下面來捋一捋

所有定義的屬性如下所示:

NS_ASSUME_NONNULL_BEGIN@interface ViewController () <UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating>@property (nonatomic, retain) NSMutableArray *arrOfSeachBoxes;/**< 搜索范圍 */@property (nonatomic, retain) NSMutableArray *arrOfSeachResults;/**< 搜索結果 */@property (nonatomic, retain) UISearchController *searchController;@property (nonatomic, retain) UITableView *tableView;@endNS_ASSUME_NONNULL_END

數據處理相關代碼如下:

// 解析數據NSString *path = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"txt"];NSData *data = [NSData dataWithContentsOfFile:path];id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];self.arrOfSeachBoxes = [NSMutableArray array];// 將搜索范圍的內容放入數組for (NSDictionary *dic in result) { [self.arrOfSeachBoxes addObject:dic[@"nick"]];}

和UISearchController的創建相關代碼如下:

// 創建self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];//searchBar的frameself.searchController.searchBar.frame = CGRectMake(0, 44, 0, 44);// 是否需要在輸入搜索內容時變暗self.searchController.dimsBackgroundDuringPresentation = false;self.searchController.searchBar.showsCancelButton = YES;/**< 取消按鈕 */self.searchController.searchResultsUpdater = self;/**< 顯示搜索結果的VC */self.searchController.active = YES;/**< 搜索結果顯示 */

和tableView相關的代碼如下:

// tableViewself.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height - 20) style:UITableViewStylePlain];[self.view addSubview:self.tableView];self.tableView.delegate = self;self.tableView.dataSource = self;[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"pool"];//將SearchBar放在tableView的頭部視圖 self.tableView.tableHeaderView = self.searchController.searchBar;

UISearchResultsUpdating協議方法代碼如下:

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {//初始化存儲搜索結果的數組self.arrOfSeachResults = [NSMutableArray array];// 獲取關鍵字NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchController.searchBar.text];// 用關鍵字過濾數組中的內容, 將過濾后的內容放入結果數組self.arrOfSeachResults = [[self.arrOfSeachBoxes filteredArrayUsingPredicate:predicate] mutableCopy];// 完成數據的過濾和存儲后刷新tableView.[self.tableView reloadData];}

tableView的DataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {// 顯示搜索結果時if (self.searchController.active) { //以搜索結果的個數返回行數 return self.arrOfSeachResults.count;} //沒有搜索時顯示所有數據 return self.arrOfSeachBoxes.count;}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pool"];// 顯示搜索結果時if (self.searchController.active) {// 原始搜索結果字符串.NSString *originResult = self.arrOfSeachResults[indexPath.row];// 獲取關鍵字的位置NSRange range = [originResult rangeOfString:self.searchController.searchBar.text];// 轉換成可以操作的字符串類型.NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:originResult];// 添加屬性(粗體)[attribute addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:range];// 關鍵字高亮[attribute addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];// 將帶屬性的字符串添加到cell.textLabel上.[cell.textLabel setAttributedText:attribute];cell.textLabel.text = self.arrOfSeachResults[indexPath.row]; } else { cell.textLabel.text = self.arrOfSeachBoxes[indexPath.row];  } return cell;}

總結

以上就是如何實現IOS搜索欄及搜索關鍵字高亮的全部內容,感興趣的同學可以自己動手操作實現下,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色精品在线看| 成人h猎奇视频网站| 亚洲国产成人精品电影| 丝袜美腿亚洲一区二区| 精品国内自产拍在线观看| 国产日本欧美一区二区三区在线| 亚洲精品乱码久久久久久金桔影视| 久久综合国产精品台湾中文娱乐网| 国产欧美日韩综合精品| 亚洲视频999| 欧美一区二区三区艳史| 精品爽片免费看久久| 日韩av影院在线观看| 日韩中文字在线| 欧洲午夜精品久久久| 亚洲网址你懂得| 久久国产精品首页| 最近2019中文免费高清视频观看www99| 亚洲视频在线播放| 国产美女高潮久久白浆| 92福利视频午夜1000合集在线观看| 国产91精品不卡视频| 欧美成人久久久| 国产精品第三页| 欧洲成人午夜免费大片| 国产成人久久久精品一区| 欧美亚洲激情在线| 精品调教chinesegay| 欧美日韩另类视频| 久久亚洲精品国产亚洲老地址| 日韩成人激情在线| 欧美中文在线字幕| 国产精品久久久久久久久久| 久久久久北条麻妃免费看| 91精品国产综合久久香蕉的用户体验| 亚洲美女激情视频| 中文字幕欧美亚洲| 97视频在线观看成人| 久久国产精品首页| 亚洲欧美国内爽妇网| 久久久国产精品一区| 欧美寡妇偷汉性猛交| 亚洲精品国产精品国产自| 在线成人一区二区| 国产久一一精品| 欧美视频一二三| yw.139尤物在线精品视频| 国产日韩欧美日韩大片| 欧美色视频日本高清在线观看| 精品国产一区二区三区久久久| 欧美精品videofree1080p| 一区二区三区黄色| 亚洲嫩模很污视频| 欧洲亚洲免费在线| 国产免费一区二区三区在线能观看| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲二区中文字幕| 国产精品免费一区豆花| 黄色成人在线免费| 在线精品高清中文字幕| 亚洲女人初尝黑人巨大| 国产精品一区二区三区在线播放| 成人av资源在线播放| 日韩久久精品成人| 欧美日韩一区二区在线播放| 欧美激情精品久久久久久蜜臀| 久久视频中文字幕| 成人看片人aa| 青青久久aⅴ北条麻妃| 国产又爽又黄的激情精品视频| 国产精品久久久久久久av大片| 亚洲欧美在线磁力| 久久精视频免费在线久久完整在线看| 国产精品亚洲第一区| 日韩在线播放视频| 欧美日韩成人黄色| 97av在线视频| 欧美精品一区二区三区国产精品| 中文欧美在线视频| 国产精品羞羞答答| 亚洲人成电影网站色…| 色悠悠久久88| 久久久www成人免费精品| 国产精品嫩草影院一区二区| 久久视频在线播放| 亚洲黄色av女优在线观看| 91国产美女视频| 88国产精品欧美一区二区三区| 国产精品美女免费视频| 欧美主播福利视频| 欧美激情视频一区二区| 黄色91在线观看| 国产女人18毛片水18精品| 一区二区三区视频免费在线观看| 欧美日韩亚洲视频| 亚洲成人国产精品| 国模视频一区二区三区| 福利一区视频在线观看| 黄色91在线观看| 在线观看欧美成人| 日韩精品在线第一页| 国产成人精品网站| 色妞欧美日韩在线| 日韩欧美中文免费| 日韩电影免费观看在线观看| 色中色综合影院手机版在线观看| 欧美国产中文字幕| 亚洲精品久久久久中文字幕欢迎你| 中文字幕精品国产| 尤物yw午夜国产精品视频明星| 91精品国产高清久久久久久久久| 欧美美女操人视频| 欧美日韩国产综合新一区| 色综合天天综合网国产成人网| 中文字幕久热精品视频在线| 国产成人av在线播放| 日韩欧美大尺度| 亚洲精品久久久久久久久久久久久| 欧美亚洲国产另类| 国产日韩av在线| 亚洲三级免费看| 亚洲天堂网在线观看| 欧美视频一二三| 亚洲人午夜色婷婷| 日韩av手机在线| 亚洲精品美女视频| 亚洲精品久久久久中文字幕二区| 亚洲精品自拍视频| 国产视频精品va久久久久久| 国产在线观看91精品一区| 国产精品视频永久免费播放| 国产69久久精品成人看| 91理论片午午论夜理片久久| 欧美国产极速在线| 欧美精品在线极品| 青青a在线精品免费观看| 久久九九免费视频| 亚洲国产精品人人爽夜夜爽| 国产精品亚洲自拍| 欧美日韩精品在线| 欧美日韩中文字幕| 色妞色视频一区二区三区四区| 欧美精品在线网站| 欧美久久精品午夜青青大伊人| 欧美贵妇videos办公室| 亚洲一区二区中文字幕| 国产精品mp4| 国产精品视频99| 夜夜嗨av色综合久久久综合网| 欧美—级a级欧美特级ar全黄| 国产精品在线看| 亚洲电影第1页| 久热在线中文字幕色999舞| 91精品综合视频| 57pao国产精品一区| 成人亲热视频网站| 亚洲精品按摩视频| 午夜精品一区二区三区av| 久久久影视精品| 不卡在线观看电视剧完整版| 成人精品久久一区二区三区| 亚洲一区二区黄| 国产精品一久久香蕉国产线看观看| 亚洲国产高潮在线观看|