1.新建工程名SearchViewController,F(xiàn)ile->New->Projectr->SingleView Application->next
成都創(chuàng)新互聯(lián)是一家專業(yè)提供仲巴企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為仲巴眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。2.添加協(xié)議和聲明變量
還需要讓類遵循UISearchBarDelegate協(xié)議,除了充當(dāng)表視圖的委托之外還需要讓它充當(dāng)搜索欄的委托。
@interface ViewController :UIViewController
{
UITableView*tableavaieGroup;
UISearchBar *search;
NSMutableDictionary *names;
NSMutableArray *keys;
BOOL isSearching;
}
3.添加plist文件,再到ViewDidLoad中初始化視圖
- (void)viewDidLoad
{
//讀取plist文件
NSString *path=[[NSBundlemainBundle]pathForResource:@"Property List"ofType:@"plist"];
NSDictionary *dictionary=[[NSDictionaryalloc]initWithContentsOfFile:path];
//self.names=dictionary;
self.allNames=dictionary;
//讀取字典中的鍵存儲在數(shù)組中
//NSArray *array=[[namesallKeys]sortedArrayUsingSelector:@selector(compare:)];
//self.myKey=array;
[selfresetSearch];
[tableViewGroupreloadData];
[tableViewGroupsetContentOffset:CGPointMake(0.0, 44.0) animated:NO];
[superviewDidLoad];}
4.實(shí)現(xiàn)委托方法
從數(shù)組中讀取字典中的plist文件有幾個(gè)分區(qū)
方法獲取一個(gè)可重用單元,如果單元不存在則創(chuàng)建一個(gè)新的單元。然后從對應(yīng)查詢的數(shù)組中獲取對象,將單元的文本設(shè)置成控制器標(biāo)題并返回單元
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
staticNSString*DisclosureCellIdentifier = @"DisclosureCellIdentifier";
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:DisclosureCellIdentifier];
if (cell == nil)
{//創(chuàng)建一個(gè)新的單元
cell=[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:DisclosureCellIdentifier];
}
//對應(yīng)查詢數(shù)組中獲取的對象,將單元文本設(shè)置成控制器標(biāo)題并返回單元
NSUInteger row=[indexPath row];
NSString *rowData=[listDataobjectAtIndex:row];
cell.textLabel.text=rowData;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
5.添加搜索欄委托方法
搜索欄有許多在其委托上調(diào)用的方法,當(dāng)用戶單擊鍵盤上的返回按鈕或搜索鍵時(shí),將調(diào)用searchBarBookmarkButtonClicked,此方法從搜索欄獲取搜索短語,并調(diào)用我們的搜索方法,這個(gè)搜索方法將刪除names中不匹配的名稱和keys中的空分區(qū):
-(void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar
{
NSString*searchTerm=[searchBar text];
[selfhandleSearchForTerm:searchTerm];
}
運(yùn)行結(jié)果如下:
(點(diǎn)擊搜索框進(jìn)行搜索“egg”,出現(xiàn)第二個(gè)頁面)
6)NSDictinary遵循NSMutableCopying協(xié)議,該協(xié)議返回一個(gè)NSmutableDictionary,但是這個(gè)方法創(chuàng)建的是淺副本。也就是說調(diào)用mutableCopy方法時(shí),它將創(chuàng)建一個(gè)新的NSmutableDictionary對象,該對象擁有源字典所擁有的所有對象,他們并不是副本,而是相同的實(shí)際對象,由于字典中存有數(shù)組,如果我們從副本的數(shù)組中刪除對象,這些對象也會從原字典的數(shù)組中刪除,因?yàn)楦北竞驮炊贾赶蛳嗤膶ο螅谶@種情況下元數(shù)組是不可改變
的所以無法刪除對象,解決這個(gè)問題,需要為存有數(shù)組的字典創(chuàng)建一個(gè)深層可變副本,
Next-> 之后 Categroy on (NSDictionary) Categrpy(MutableDeepCopy)
此方法創(chuàng)建一個(gè)新的可變字典,然后在原字典中所有的鍵進(jìn)行迭代,為它遇到的每個(gè)數(shù)組創(chuàng)建可變副本。
-(NSMutableDictionary *)mutableDeepCopy
{
NSMutableDictionary *returnDict=[[NSMutableDictionaryalloc] initWithCapacity:[selfcount]];
NSArray *keys=[selfallKeys];
//NSArray *keys=[self ];
// 因?yàn)樵谠械膍utableCopy 中, 只會對第一層對象進(jìn)行mutable化.
// 比如NSDictionary嵌套NSArray的話.
// 原有的MutableCopy只會返回NSMutableDictionary, 而不會使其子元素也變?yōu)镹SMutableArray.
// 而這種方法實(shí)際上類似遞歸的結(jié)構(gòu).
//循環(huán)讀取復(fù)制每一個(gè)元素
for(id key in keys)
{
id oneValue=[selfvalueForKey:key];
id oneCopy=nil;
//如果key對應(yīng)的元素可以響應(yīng)mutableDeepCopy方法(還是NSDictionary),調(diào)用mutableDeepCopy方法復(fù)制
if([oneValue respondsToSelector:@selector(mutableDeepCopy)])
oneCopy=[oneValue mutableDeepCopy];
elseif([oneValue respondsToSelector:@selector(mutableCopy)])
oneCopy=[oneValue mutableCopy];
if(oneCopy==nil)
oneCopy=[oneValue copy];
[returnDict setValue:oneCopy forKey:key];
}
return returnDict;
}
7)要想在運(yùn)行時(shí)搜索框后有一個(gè)Cancel按鈕只需在Option中勾選Shows Cancel Button即可,如下圖:
當(dāng)用戶單擊Cancel按鈕時(shí),程序會將搜索短語設(shè)置為空,然后重置搜索,并重新加載數(shù)據(jù)一顯示所有名稱,此外,還要讓搜索欄放棄第一響應(yīng)者狀態(tài),這樣鍵盤就不再起作用,以便于用戶重新處理表視圖。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。