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

首頁 > 系統 > iOS > 正文

iOS tableView實現搜索功能

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

本文實例為大家分享了tableView搜索功能的具體代碼,供大家參考,具體內容如下

框架:https://github.com/honeycao/HCSortAndSearchDemo

github里面有詳細的說明

支持中文排序

#import "ChineseToPinyin.h"#import "HCSortString.h"#import "WLCCityTVC.h"#import "WLCProvinceModel.h"#import "ZYPinYinSearch.h"#define reusedID @"cityCell"@interface WLCCityTVC () <UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating>/** * 存放城市字典的數組,后來也存放排序后的 */@property (nonatomic, strong) NSMutableArray* cityArrM;@property (nonatomic, strong) WLCUser* user;/** * 存放首字母的數組 */@property (nonatomic, strong) NSMutableArray* letterArrM;@property (nonatomic, strong) NSMutableArray* wordArr;/** * 存放城市模型的數組 */@property (nonatomic, strong) NSMutableArray* modelArrM;@property (strong, nonatomic) NSMutableArray* searchDataSource; /**<搜索結果數據源*/@property (strong, nonatomic) UISearchController* searchController;@end@implementation WLCCityTVC- (void)viewDidLoad{ [super viewDidLoad]; [self setupUI];}#pragma mark - navitionBarBackBarItem返回事件- (BOOL)navigationShouldPopOnBackButton{ self.searchController.active = NO; return YES;}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (WLCUser*)user{ if (nil == _user) {  _user = [NSKeyedUnarchiver unarchiveObjectWithFile:fileUser]; } return _user;}- (NSMutableArray*)cityArrM{ if (nil == _cityArrM) {  _cityArrM = [NSMutableArray array]; } return _cityArrM;}- (NSMutableArray*)wordArr{ if (nil == _wordArr) {  _wordArr = [NSMutableArray array]; } return _wordArr;}- (NSMutableArray*)letterArrM{ if (nil == _letterArrM) {  _letterArrM = [NSMutableArray array]; } return _letterArrM;}- (UISearchController*)searchController{ if (!_searchController) {  _searchController = [[UISearchController alloc] initWithSearchResultsController:nil];  _searchController.searchResultsUpdater = self;  _searchController.dimsBackgroundDuringPresentation = NO;  _searchController.hidesNavigationBarDuringPresentation = NO;  _searchController.searchBar.placeholder = @"搜索";    _searchController.searchBar.tintColor = [UIColor whiteColor];  [_searchController.searchBar sizeToFit]; } return _searchController;}- (NSMutableArray*)modelArrM{ if (nil == _modelArrM) {  _modelArrM = [NSMutableArray array];  for (NSArray* tempArr in self.cityArrM) {   for (NSDictionary* dict in tempArr) {    [WLCProvinceModel setupReplacedKeyFromPropertyName:^NSDictionary* {     return @{      @"pID" : @"id"     };    }];    WLCProvinceModel* model = [WLCProvinceModel objectWithKeyValues:dict];    [_modelArrM addObject:model];   }  } } return _modelArrM;}- (NSMutableArray*)searchDataSource{ if (nil == _searchDataSource) {  _searchDataSource = [NSMutableArray array]; } return _searchDataSource;}- (void)setupUI{ self.tableView.backgroundColor = [UIColor rgb:234 andGreen:234 andBlue:243]; [self getAllCities]; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.tableFooterView = [[UIView alloc] init];}- (void)getAllCities{ NSString* url = [kURL stringByAppendingString:@"promary/"]; url = [url stringByAppendingString:self.cityID]; url = [url stringByAppendingString:@"/city"]; [SVProgressHUD showWithStatus:@"獲取城市中"]; [NetRequestTool requestWithParamsDict:nil image:nil name:nil token:self.user.token value:nil hearerField:nil URL:url type:GET successBlock:^(AFHTTPRequestOperation* _Nonnull operation, id _Nonnull responseObject) {  NSString* errNum = [NSString stringWithFormat:@"%@", responseObject[@"errNum"]];  if ([errNum isEqualToString:@"1"]) {   [SVProgressHUD setMinimumDismissTimeInterval:2.5];   [SVProgressHUD showInfoWithStatus:[NSString stringWithFormat:@"%@", responseObject[@"retMsg"]]];   [self.navigationController popViewControllerAnimated:YES];  }  else {   [SVProgressHUD dismiss];   @try {    self.cityArrM = responseObject[@"retData"];    NSMutableArray* cityArrM = [NSMutableArray array];    for (NSMutableDictionary* cityDic in self.cityArrM) {     [cityArrM addObject:[cityDic objectForKey:@"name"]];     NSMutableDictionary* dictM = [NSMutableDictionary dictionaryWithDictionary:cityDic];     [self prepareCityListDatasourceWithArray:cityArrM andToDictionary:dictM];    }    self.cityArrM = [self sortArray:self.wordArr];   } @catch (NSException* exception) {   } @finally {    [self.tableView setTableHeaderView:self.searchController.searchBar];    [self.tableView reloadData];   }  } }  anderrorBlock:^(AFHTTPRequestOperation* _Nonnull operation, NSError* _Nonnull error) {   WLog(@"error == %@", error);   [SVProgressHUD showErrorWithStatus:@"獲取省份失敗,請稍后重試"];   [self.navigationController popViewControllerAnimated:YES];  }];}#pragma mark -排序城市- (void)prepareCityListDatasourceWithArray:(NSArray*)array andToDictionary:(NSMutableDictionary*)dic{ for (NSString* city in array) {  NSString* cityPinyin = [ChineseToPinyin pinyinFromChiniseString:city];  if ([city isEqualToString:@"重慶"]) {   cityPinyin = @"CHONGQING";  }  NSString* firstLetter = [cityPinyin substringWithRange:NSMakeRange(0, 1)];  if (![dic objectForKey:firstLetter]) {   //   NSMutableArray* arr = [NSMutableArray array];   //   [dic setValue:firstLetter forKey:@"letter"];   dic[@"letter"] = firstLetter;  }  if ([[dic objectForKey:firstLetter] containsObject:city]) {   return;  } } [self.wordArr addObject:dic]; //  [self.wordArr addObjectsFromArray:[[dic allValues] sortedArrayUsingSelector:@selector(compare:)]];}/** * 排序并按首字母分組 * * @param arrayToSort <#arrayToSort description#> * * @return <#return value description#> */- (NSMutableArray*)sortArray:(NSMutableArray*)arrayToSort{ NSMutableArray* arrayForArrays = [[NSMutableArray alloc] init]; //根據拼音對數組排序 NSArray* sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"letter" ascending:YES]]; //排序 [arrayToSort sortUsingDescriptors:sortDescriptors]; NSMutableArray* tempArray = nil; BOOL flag = NO; //分組 for (int i = 0; i < arrayToSort.count; i++) {  NSString* pinyin = [arrayToSort[i] objectForKey:@"letter"];  NSString* firstChar = [pinyin substringToIndex:1];  //  NSLog(@"%@",firstChar);  if (![self.letterArrM containsObject:[firstChar uppercaseString]]) {   [self.letterArrM addObject:[firstChar uppercaseString]];   tempArray = [[NSMutableArray alloc] init];   flag = NO;  }  if ([self.letterArrM containsObject:[firstChar uppercaseString]]) {   [tempArray addObject:arrayToSort[i]];   if (flag == NO) {    [arrayForArrays addObject:tempArray];    flag = YES;   }  } } return arrayForArrays;}//讓cell下劃線左對齊- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath{ if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {  [cell setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0)]; } if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {  [cell setPreservesSuperviewLayoutMargins:NO]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {  [cell setLayoutMargins:UIEdgeInsetsZero]; }}#pragma mark - tableView's delegate and datasource- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{ if (!self.searchController.active) {  return self.letterArrM.count; } else {  return 1; }}- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{ if (!self.searchController.active) {  return [self.cityArrM[section] count]; } else {  return self.searchDataSource.count; }}- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{ UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reusedID]; if (!cell) {  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedID]; } @try {  if (!self.searchController.active) {   NSDictionary* dict = self.cityArrM[indexPath.section][indexPath.row];   cell.textLabel.text = [NSString stringWithFormat:@"%@", dict[@"name"]];  }  else {   //   NSDictionary* dict = self.searchDataSource[indexPath.row];   WLCProvinceModel* model = self.searchDataSource[indexPath.row];   cell.textLabel.text = [NSString stringWithFormat:@"%@", model.name];  } } @catch (NSException* exception) { } @finally { } return cell;}- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section{ if (!self.searchController.active) {  return [self.letterArrM objectAtIndex:section]; } else  return nil;}- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView{ if (!self.searchController.active) {  return self.letterArrM; } else  return nil;}- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{ NSDictionary* dict; @try {  if (!self.searchController.active) {   dict = self.cityArrM[indexPath.section][indexPath.row];  }  else {   WLCProvinceModel* model = self.searchDataSource[indexPath.row];   dict = [NSDictionary dictionaryWithObjects:@[ model.name, model.pID ] forKeys:@[ @"name", @"id" ]];  }  [[NSNotificationCenter defaultCenter] postNotificationName:@"cityChoosed" object:self userInfo:dict]; } @catch (NSException* exception) { } @finally { } self.searchController.active = NO; [self.navigationController popToViewController:self.fatherVC animated:YES]; [tableView deselectRowAtIndexPath:indexPath animated:YES];}#pragma mark - UISearchDelegate- (void)updateSearchResultsForSearchController:(UISearchController*)searchController{ [self.searchDataSource removeAllObjects]; NSArray* ary = [NSArray new]; //對排序好的數據進行搜索 NSDictionary* allDataSource = [HCSortString sortAndGroupForArray:self.modelArrM PropertyName:@"name"]; ary = [HCSortString getAllValuesFromDict:allDataSource]; if (searchController.searchBar.text.length == 0) {  [self.searchDataSource addObjectsFromArray:ary]; } else {  ary = [ZYPinYinSearch searchWithOriginalArray:ary andSearchText:searchController.searchBar.text andSearchByPropertyName:@"name"];  [self.searchDataSource addObjectsFromArray:ary]; } [self.tableView reloadData];}@end

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美a级成人黄色| 欧美日韩中国免费专区在线看| 日韩中文在线视频| 亚洲欧美精品suv| 日韩av在线网| 成人久久久久久| 久久视频在线播放| 精品久久久av| 亚洲精品欧美极品| 欧美成人精品不卡视频在线观看| 91精品视频观看| 6080yy精品一区二区三区| 亚洲美女免费精品视频在线观看| 亚洲自拍在线观看| 孩xxxx性bbbb欧美| 97视频在线观看视频免费视频| 日韩美女av在线| 亚洲性生活视频在线观看| 国内精品在线一区| 欧美在线观看www| 国产欧美日韩高清| 久久精品国产久精国产思思| 日韩精品中文字幕视频在线| 欧美在线一区二区视频| 国产精品视频最多的网站| 日韩av最新在线| 亚洲欧美日韩精品久久| 久久国产精品免费视频| 日韩少妇与小伙激情| 日韩视频免费在线| 欧美最近摘花xxxx摘花| 国产精品一区二区久久| 2020国产精品视频| 91超碰caoporn97人人| 亚洲免费一在线| 欧美大全免费观看电视剧大泉洋| www国产亚洲精品久久网站| 亚洲国产日韩精品在线| 国产精品流白浆视频| 黑人精品xxx一区一二区| 欧美裸体xxxx极品少妇软件| 欧美在线视频导航| 欧洲成人免费视频| 亚洲国产成人久久综合一区| 国产精品免费网站| 日韩在线免费视频| 91精品国产91久久久久福利| 亚洲精品日韩丝袜精品| 国内精品久久久久影院优| 国产精品丝袜高跟| 欧美性生活大片免费观看网址| 日本一欧美一欧美一亚洲视频| 久久亚洲电影天堂| 国自在线精品视频| 日韩高清有码在线| 久久成人亚洲精品| 欧美日韩久久久久| 日韩精品在线免费观看视频| 九色成人免费视频| 久久国产加勒比精品无码| 亚洲精品videossex少妇| 亚洲aⅴ男人的天堂在线观看| 欧美在线视频观看| 成人两性免费视频| 亚洲欧美第一页| 国产综合视频在线观看| 欧美不卡视频一区发布| 成人h片在线播放免费网站| 亚洲国内精品在线| 精品国产1区2区| 精品国产乱码久久久久酒店| 69久久夜色精品国产69乱青草| 国产色婷婷国产综合在线理论片a| 68精品久久久久久欧美| 亚洲综合小说区| 欧美色视频日本高清在线观看| 中文字幕亚洲精品| 亚洲国产精品专区久久| 欧美激情一区二区三区在线视频观看| 亚洲bt天天射| 欧美性猛交xxxx乱大交| 日韩成人中文字幕在线观看| 中文字幕日韩av综合精品| 久久婷婷国产麻豆91天堂| 国产精品女主播视频| 国产一区二区三区视频| 国产精品国产三级国产专播精品人| 欧美成人精品在线播放| 欧美精品电影免费在线观看| 国产aⅴ夜夜欢一区二区三区| 欧美在线视频观看| 亚洲欧洲成视频免费观看| 中文综合在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 久久久噜噜噜久久中文字免| 日本一区二三区好的精华液| 日韩av影视综合网| 亚洲精品一区二区三区婷婷月| 欧美日韩国产在线看| 懂色av影视一区二区三区| 欧美性猛交99久久久久99按摩| 91av在线不卡| 久久久久久成人精品| 成人免费淫片视频软件| 午夜精品久久久久久久久久久久| 中文字幕日韩在线观看| 高清亚洲成在人网站天堂| 国产91精品高潮白浆喷水| 国产午夜精品美女视频明星a级| 国产精品h片在线播放| 伊人一区二区三区久久精品| 成人免费视频xnxx.com| 91丨九色丨国产在线| 亚洲欧美日韩国产中文| 久久影院资源站| 在线精品国产成人综合| 色综合久久88色综合天天看泰| 日韩在线观看免费| 国产欧美日韩中文字幕在线| 亚洲免费精彩视频| 久久91超碰青草是什么| 国产精品女人网站| 欧美激情精品久久久久久变态| 69av视频在线播放| 日韩精品视频在线观看网址| 欧美日本在线视频中文字字幕| 日韩男女性生活视频| 中国china体内裑精亚洲片| 亚洲自拍偷拍在线| 国产精品高潮呻吟久久av野狼| 久久免费视频在线观看| 久久精品99国产精品酒店日本| 91黄色8090| 日本一区二区三区四区视频| 欧美激情综合亚洲一二区| 午夜精品一区二区三区在线播放| 韩剧1988在线观看免费完整版| 亚洲成人精品视频在线观看| 国产69久久精品成人| 欧洲成人午夜免费大片| 91精品国产综合久久香蕉922| 亚洲午夜小视频| 另类图片亚洲另类| 国产精品十八以下禁看| 欧美麻豆久久久久久中文| 欧洲美女7788成人免费视频| 美女撒尿一区二区三区| 成人黄色大片在线免费观看| 91中文字幕一区| 成人黄色av免费在线观看| 热久久视久久精品18亚洲精品| 欧美性理论片在线观看片免费| 日韩欧美在线视频日韩欧美在线视频| 亚洲国产精品人久久电影| 欧美性xxxx极品hd满灌| 久久精品这里热有精品| 亚洲在线观看视频| 日韩国产一区三区| 成人有码在线视频| 亚洲已满18点击进入在线看片| 亚洲性线免费观看视频成熟| 热久久美女精品天天吊色| 国产精品自拍偷拍视频| 久久久久久久久久久国产|