中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能

這篇文章主要為大家展示了“iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能”這篇文章吧。

荔灣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

具體內(nèi)容如下

一、先用xcode創(chuàng)建好工程

iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能

通過(guò)xib文件來(lái)初始化視圖控制器

iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能

二、編寫(xiě)代碼

1、先為NSDictionary創(chuàng)建一個(gè)分類 實(shí)現(xiàn)字典的深拷貝

.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]]; //這里的容量也只是個(gè)參考值,表示對(duì)大小的限制 大小是調(diào)用該方法的count
 NSArray *keys = [self allKeys]; //self就是個(gè)可變的字典
 for(id key in keys)
 {
  id dicValue = [self valueForKey:key]; 
  //從 NSDictionary 取值的時(shí)候有兩個(gè)方法objectForkey valueForKey
  id dicCopy = nil;
  if([dicValue respondsToSelector:@selector(mutableDeepCopy)]) 
  //如果對(duì)象沒(méi)有響應(yīng)mutabledeepcopy 就創(chuàng)建一個(gè)可變副本 dicValue 有沒(méi)有實(shí)現(xiàn)這個(gè)方法
  {
   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、編寫(xiě)主代碼

.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 //只在第一次加載視圖調(diào)用
{
 [super viewDidLoad];
 /*加載plist文件*/
 NSString *wordsPath = [[NSBundle mainBundle]pathForResource:@"NoteSection" ofType:@"plist"];//得到屬性列表的路徑
 NSDictionary *dictionary = [[NSDictionary alloc]initWithContentsOfFile:wordsPath];
 self.allWords = dictionary;
 [self resetSearch]; //加載并填充words可變字典和keys數(shù)組
 
 _search.autocapitalizationType = UITextAutocapitalizationTypeNone;//不自動(dòng)大寫(xiě)
 _search.autocorrectionType = UITextAutocorrectionTypeNo;//不自動(dòng)糾錯(cuò)
}

//取消搜索或者改變搜索條件
- (void)resetSearch
{
 self.words = [self.allWords mutableDeepCopy]; //得到所有字典的副本 得到一個(gè)字典
 NSLog(@"所有字典 = %@",self.words);
 NSMutableArray *keyArray = [[NSMutableArray alloc]init];//創(chuàng)建一個(gè)可變數(shù)組
 [keyArray addObjectsFromArray:[[self.allWords allKeys]sortedArrayUsingSelector:@selector(compare:)]]; //用指定的selector對(duì)array的元素進(jìn)行排序
 self.keys = keyArray; //將所有key 存到一個(gè)數(shù)組里面
 NSLog(@"所有key = %@",self.keys);
}
//實(shí)現(xiàn)搜索方法
- (void)handleSearchForTerm:(NSString *)searchTerm
{
 NSMutableArray *sectionsRemove = [[NSMutableArray alloc]init]; //創(chuàng)建一個(gè)數(shù)組存放我們所找到的空分區(qū)
 [self resetSearch];
 for(NSString *key in self.keys)//遍歷所有的key
 {
  NSMutableArray *array = [_words valueForKey:key] ;  //得到當(dāng)前鍵key的名稱 數(shù)組
  NSMutableArray *toRemove = [[NSMutableArray alloc]init];//需要從words中刪除的值 數(shù)組
  for(NSString *word in array) //實(shí)現(xiàn)搜索
  {
   if([word rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)//搜索時(shí)忽略大小寫(xiě) 把沒(méi)有搜到的值 放到要?jiǎng)h除的對(duì)象數(shù)組中去
    [toRemove addObject:word]; //把沒(méi)有搜到的內(nèi)容放到 toRemove中去
  }
  
  if([array count] == [toRemove count])//校對(duì)要?jiǎng)h除的名稱數(shù)組長(zhǎng)度和名稱數(shù)組長(zhǎng)度是否相等
   [sectionsRemove addObject:key]; //相等 則整個(gè)分區(qū)組為空
  [array removeObjectsInArray:toRemove]; //否則 刪除數(shù)組中所有與數(shù)組toRemove包含相同的元素
 }
 [self.keys removeObjectsInArray:sectionsRemove];// 刪除整個(gè)key 也就是刪除空分區(qū),釋放用來(lái)存儲(chǔ)分區(qū)的數(shù)組,并重新加載table 這樣就實(shí)現(xiàn)了搜索
 [_table reloadData];
}

- (void)viewWillAppear:(BOOL)animated //當(dāng)使用Push或者prenset方式調(diào)用
{
}
//#pragma mark -
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
 return ([_keys count] >0)?[_keys count]:1; //搜索時(shí)可能會(huì)刪除所有分區(qū) 則要保證要有一個(gè)分區(qū)
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 if([_keys count] == 0)
 {
  return 0;
 }
 NSString *key = [_keys objectAtIndex:section]; //得到第幾組的key
 NSArray *wordSection = [_words objectForKey:key]; //得到這個(gè)key里面所有的元素
 return [wordSection count]; //返回元素的個(gè)數(shù)
}
- (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]; //得到這個(gè)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;
}
//為每個(gè)分區(qū)指定一個(gè)標(biāo)題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
 if([_keys count] == 0)
  return @" ";
 NSString *key = [_keys objectAtIndex:section];
 return key;
}
//創(chuàng)建一個(gè)索引表
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
 return _keys;
}
#pragma mark - 

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 [_search resignFirstResponder]; //點(diǎn)擊任意 cell都會(huì)取消鍵盤(pán)
 return indexPath;
}

#pragma mark-

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar //搜索button點(diǎn)擊事件
{
 NSString *searchTerm = [searchBar text];
 [self handleSearchForTerm:searchTerm]; //搜索內(nèi)容 刪除words里面的空分區(qū)和不匹配內(nèi)容
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{ //搜索內(nèi)容隨著輸入及時(shí)地顯示出來(lái)
 if([searchText length] == 0)
 {
  [self resetSearch];
  [_table reloadData];
  return;
 }
 else
  [self handleSearchForTerm:searchText];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar //點(diǎn)擊取消按鈕
{
 _search.text = @""; //標(biāo)題 為空
 [self resetSearch]; //重新 加載分類數(shù)據(jù)
 [_table reloadData];
 [searchBar resignFirstResponder]; //退出鍵盤(pán)

}
@end

運(yùn)行結(jié)果

iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能

以上是“iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱:iOS如何使用tableview實(shí)現(xiàn)簡(jiǎn)單搜索功能
文章起源:http://m.rwnh.cn/article22/psgjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器、ChatGPT網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
海淀区| 搜索| 三明市| 邯郸县| 乃东县| 尼木县| 沙湾县| 乌鲁木齐县| 美姑县| 华蓥市| 东阳市| 漠河县| 灵武市| 淅川县| 丁青县| 福贡县| 全州县| 广东省| 礼泉县| 凤阳县| 海安县| 金沙县| 桂阳县| 常熟市| 崇文区| 磴口县| 萍乡市| 渭南市| 定襄县| 衡阳市| 宣化县| 恩施市| 合川市| 横山县| 吉安县| 定州市| 安乡县| 蒙自县| 巫山县| 登封市| 金华市|