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

首頁 > 系統 > iOS > 正文

iOS tableview實現簡單搜索功能

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

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

一、先用xcode創建好工程

通過xib文件來初始化視圖控制器

二、編寫代碼

1、先為NSDictionary創建一個分類 實現字典的深拷貝

.h文件

#import <Foundation/Foundation.h>@interface NSDictionary (MutableDeepCopy)- (NSMutableDictionary *)mutableDeepCopy;@end

.m文件

#import "NSDictionary+MutableDeepCopy.h"@implementation NSDictionary (MutableDeepCopy)- (NSMutableDictionary *)mutableDeepCopy{ NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithCapacity:[self count]]; //這里的容量也只是個參考值,表示對大小的限制 大小是調用該方法的count NSArray *keys = [self allKeys]; //self就是個可變的字典 for(id key in keys) {  id dicValue = [self valueForKey:key];   //從 NSDictionary 取值的時候有兩個方法objectForkey valueForKey  id dicCopy = nil;  if([dicValue respondsToSelector:@selector(mutableDeepCopy)])   //如果對象沒有響應mutabledeepcopy 就創建一個可變副本 dicValue 有沒有實現這個方法  {   dicCopy = [dicValue mutableDeepCopy];  }  else if([dicValue respondsToSelector:@selector(mutableCopy)])  {   dicCopy = [dicValue mutableCopy];  }  if(dicCopy ==nil)  {   dicCopy = [dicValue copy];  }  [mutableDictionary setValue:dicCopy forKey:key]; } return mutableDictionary;}@end

2、編寫主代碼

.h文件
NoteScanViewController.h

#import <UIKit/UIKit.h>@interface NoteScanViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate>@property (nonatomic,retain)NSMutableDictionary *words;@property (nonatomic,retain)NSMutableArray *keys;@property (weak, nonatomic) IBOutlet UITableView *table;@property (weak, nonatomic) IBOutlet UISearchBar *search;@property (nonatomic,retain)NSDictionary *allWords;- (void)resetSearch;- (void)handleSearchForTerm:(NSString *)searchTerm;@end

.m文件

#import "NoteScanViewController.h"#import "NSDictionary+MutableDeepCopy.h"@interface NoteScanViewController ()@end@implementation NoteScanViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) {  // Custom initialization } return self;}- (void)viewDidLoad //只在第一次加載視圖調用{ [super viewDidLoad]; /*加載plist文件*/ NSString *wordsPath = [[NSBundle mainBundle]pathForResource:@"NoteSection" ofType:@"plist"];//得到屬性列表的路徑 NSDictionary *dictionary = [[NSDictionary alloc]initWithContentsOfFile:wordsPath]; self.allWords = dictionary; [self resetSearch]; //加載并填充words可變字典和keys數組  _search.autocapitalizationType = UITextAutocapitalizationTypeNone;//不自動大寫 _search.autocorrectionType = UITextAutocorrectionTypeNo;//不自動糾錯}//取消搜索或者改變搜索條件- (void)resetSearch{ self.words = [self.allWords mutableDeepCopy]; //得到所有字典的副本 得到一個字典 NSLog(@"所有字典 = %@",self.words); NSMutableArray *keyArray = [[NSMutableArray alloc]init];//創建一個可變數組 [keyArray addObjectsFromArray:[[self.allWords allKeys]sortedArrayUsingSelector:@selector(compare:)]]; //用指定的selector對array的元素進行排序 self.keys = keyArray; //將所有key 存到一個數組里面 NSLog(@"所有key = %@",self.keys);}//實現搜索方法- (void)handleSearchForTerm:(NSString *)searchTerm{ NSMutableArray *sectionsRemove = [[NSMutableArray alloc]init]; //創建一個數組存放我們所找到的空分區 [self resetSearch]; for(NSString *key in self.keys)//遍歷所有的key {  NSMutableArray *array = [_words valueForKey:key] ;  //得到當前鍵key的名稱 數組  NSMutableArray *toRemove = [[NSMutableArray alloc]init];//需要從words中刪除的值 數組  for(NSString *word in array) //實現搜索  {   if([word rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)//搜索時忽略大小寫 把沒有搜到的值 放到要刪除的對象數組中去    [toRemove addObject:word]; //把沒有搜到的內容放到 toRemove中去  }    if([array count] == [toRemove count])//校對要刪除的名稱數組長度和名稱數組長度是否相等   [sectionsRemove addObject:key]; //相等 則整個分區組為空  [array removeObjectsInArray:toRemove]; //否則 刪除數組中所有與數組toRemove包含相同的元素 } [self.keys removeObjectsInArray:sectionsRemove];// 刪除整個key 也就是刪除空分區,釋放用來存儲分區的數組,并重新加載table 這樣就實現了搜索 [_table reloadData];}- (void)viewWillAppear:(BOOL)animated //當使用Push或者prenset方式調用{}//#pragma mark -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return ([_keys count] >0)?[_keys count]:1; //搜索時可能會刪除所有分區 則要保證要有一個分區}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if([_keys count] == 0) {  return 0; } NSString *key = [_keys objectAtIndex:section]; //得到第幾組的key NSArray *wordSection = [_words objectForKey:key]; //得到這個key里面所有的元素 return [wordSection count]; //返回元素的個數}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSUInteger section = [indexPath section]; //得到第幾組 NSUInteger row = [indexPath row]; //得到第幾行 NSString *key = [_keys objectAtIndex:section]; //得到第幾組的key NSArray *wordSection = [_words objectForKey:key]; //得到這個key里面的所有元素 static NSString *NoteSectionIdentifier = @"NoteSectionIdentifier"; UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:NoteSectionIdentifier]; if(cell == nil) {  cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NoteSectionIdentifier];   } cell.textLabel.text = [wordSection objectAtIndex:row]; return cell;}//為每個分區指定一個標題- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ if([_keys count] == 0)  return @" "; NSString *key = [_keys objectAtIndex:section]; return key;}//創建一個索引表- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ return _keys;}#pragma mark - - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [_search resignFirstResponder]; //點擊任意 cell都會取消鍵盤 return indexPath;}#pragma mark-- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar //搜索button點擊事件{ NSString *searchTerm = [searchBar text]; [self handleSearchForTerm:searchTerm]; //搜索內容 刪除words里面的空分區和不匹配內容}- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ //搜索內容隨著輸入及時地顯示出來 if([searchText length] == 0) {  [self resetSearch];  [_table reloadData];  return; } else  [self handleSearchForTerm:searchText];}- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar //點擊取消按鈕{ _search.text = @""; //標題 為空 [self resetSearch]; //重新 加載分類數據 [_table reloadData]; [searchBar resignFirstResponder]; //退出鍵盤}@end

運行結果

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品视频在线播放| 久久久在线视频| 欧美激情亚洲综合一区| 懂色av影视一区二区三区| 欧美福利视频在线观看| 亚洲free性xxxx护士白浆| 日韩国产在线播放| 欲色天天网综合久久| 久久欧美在线电影| 国产日韩在线亚洲字幕中文| 欧洲亚洲在线视频| 国产精品高清在线| 亚洲精品一区中文字幕乱码| 午夜精品久久久久久久久久久久| 国产精品高清在线| 久久精品亚洲国产| 日韩av在线不卡| 日韩av片电影专区| 亚洲视频在线看| 亚洲午夜性刺激影院| 国产精品久久久久久久久久新婚| 亚洲激情在线观看| 国产综合视频在线观看| 欧美精品成人91久久久久久久| 国产欧美在线播放| 成人精品视频99在线观看免费| 国产精品久久久久久久一区探花| 91高清免费在线观看| 亚洲视频在线看| 2019中文在线观看| 欧美成人一二三| 91系列在线播放| 亚洲色图日韩av| 91日本视频在线| 国产精品久久久久久久久久新婚| 国产成人久久精品| 国产精品福利无圣光在线一区| 福利视频导航一区| 亚洲精品中文字幕av| 久久久久国产精品一区| 狠狠躁夜夜躁人人爽天天天天97| 国产精品成av人在线视午夜片| 欧美日韩国产123| 欧美精品videofree1080p| 成人网在线免费看| 欧美肥臀大乳一区二区免费视频| 亚洲欧美日韩天堂| 日韩精品高清视频| 深夜福利亚洲导航| 国产精品久久久久91| 69精品小视频| 九九视频这里只有精品| 国产精品www网站| 久久久www成人免费精品张筱雨| 亚洲风情亚aⅴ在线发布| 97热精品视频官网| 日韩高清免费在线| 久久久国产精品一区| 国产99久久久欧美黑人| 情事1991在线| 2021久久精品国产99国产精品| 欧美精品情趣视频| 激情久久av一区av二区av三区| 亚洲成人av片在线观看| 欧美日韩美女视频| 亚洲精品国产美女| 91免费国产视频| 久久在线免费视频| 久久韩国免费视频| 欧美精品电影在线| 久久精品亚洲94久久精品| 国产精品青草久久久久福利99| 日韩精品免费电影| 欧美成人h版在线观看| 国产91在线播放精品91| 欧美精品videofree1080p| 欧美一区二三区| 91亚洲精品视频| 91影视免费在线观看| 久久午夜a级毛片| 亚洲精品一区二区在线| 日韩电视剧在线观看免费网站| 精品久久久久久| 亚洲性av在线| 91精品综合久久久久久五月天| 日韩欧美黄色动漫| 91久久久国产精品| 日韩精品高清在线| 中文字幕精品www乱入免费视频| 亚洲xxx大片| 色偷偷88888欧美精品久久久| 欧美俄罗斯性视频| 久久夜色精品亚洲噜噜国产mv| 亚洲一区二区日本| 久久久精品视频成人| 精品国产自在精品国产浪潮| 国产在线精品一区免费香蕉| 成人性生交大片免费观看嘿嘿视频| 亚洲а∨天堂久久精品9966| 欧美日韩另类在线| 欧美日韩国产激情| 色婷婷综合久久久久中文字幕1| 美女999久久久精品视频| 亚洲黄色在线观看| 久久精品国产成人| 国产在线999| 日韩美女在线播放| 亚洲日韩中文字幕在线播放| 精品一区二区三区四区| 国产精品普通话| 成人a免费视频| 国外成人免费在线播放| 欧美黑人巨大精品一区二区| 中文字幕久精品免费视频| 欧美极品欧美精品欧美视频| 正在播放欧美视频| 91精品在线一区| 精品无人区太爽高潮在线播放| 日韩电影中文字幕一区| 亚洲天堂影视av| 国产精品一区二区三区毛片淫片| 日本亚洲欧洲色| 成人在线视频网站| 欧美小视频在线观看| 97成人精品区在线播放| 日韩一级裸体免费视频| 日韩中文第一页| 77777少妇光屁股久久一区| 欧美在线一级va免费观看| 国产精品久久久久9999| 亚洲精品一区二区三区婷婷月| 国语自产精品视频在线看| 日韩免费观看网站| 国产亚洲精品久久| 久久99久久99精品免观看粉嫩| 国产精品99一区| 亚洲视屏在线播放| 超碰91人人草人人干| 成人福利网站在线观看11| 在线观看欧美视频| 中文字幕欧美亚洲| 欧美激情亚洲自拍| 色香阁99久久精品久久久| 亚洲欧美在线第一页| 日韩在线视频免费观看| 欧美色播在线播放| 青青a在线精品免费观看| 亚洲福利视频免费观看| 国产成人精品一区| 九九热精品视频在线播放| 日韩免费黄色av| 91国内免费在线视频| 精品一区电影国产| 性色av一区二区三区在线观看| 成人性生交大片免费看视频直播| 久久国产精彩视频| 久久精品99国产精品酒店日本| 欧美日韩亚洲激情| 97在线精品国自产拍中文| 色婷婷综合久久久久中文字幕1| 国外成人免费在线播放| 97精品国产97久久久久久免费| 黑人巨大精品欧美一区二区三区| 国产欧美精品一区二区|