您好,登錄后才能下訂單哦!
一:添加searchBar的兩種方式:
////////////添加搜索欄方式一:直接畫一個,畫不好的話會覆蓋別的東西/////
self.tableView.backgroundView = [[UIView alloc] init];
[self.tableView setBackgroundColor:[UIColor clearColor]];
UISearchBar *mySearchBar = [[UISearchBar alloc]
initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, 45)];
mySearchBar.delegate = self;
mySearchBar.showsCancelButton = NO;
mySearchBar.barStyle=UIBarStyleDefault;
mySearchBar.placeholder=@"Enter Name or Categary";
mySearchBar.keyboardType=UIKeyboardTypeNamePhonePad;
[self.view addSubview:mySearchBar];
[mySearchBar release];
/////////////添加搜索欄方式二:添加置tableView上////////////////
UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width,40)];
searchBar.placeholder=@"Enter Name";//默認(rèn)搜索框文本內(nèi)容;
searchBar.barStyle = UIBarStyleBlackTranslucent;//設(shè)置bar的風(fēng)格
searchBar.delegate = self;
self.tableView.tableHeaderView = searchBar;//將searchBar添加到tableView上;且searchBar添加到tableView的頭,注意滾動出屏幕后,搜索框也不在了,只出現(xiàn)在首頁
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;//是否自動對輸入文本對象進(jìn)行風(fēng)格校正
searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;//設(shè)置什么時(shí)候用大寫
searchBar.backgroundColor = [UIColor redColor];//設(shè)置bar的背景顏色;
searchBar.backgroundImage = [UIImagep_w_picpathNamed:@"item.png"];//修改背景圖片
searchBar.showsSearchResultsButton =YES;//是否在控件的右端顯示搜索結(jié)果按鈕
searchBar.showsCancelButton = YES;
searchBar.showsScopeBar = YES;//控制搜索欄下部的選擇欄是否顯示出來
searchBar.prompt = @"ewq";//顯示在控件頂部的一行提示文字
searchBar.translucent = YES;//指定控件是否會有透視效果
二、searchBar的結(jié)構(gòu)了解:
iPhone開發(fā)之UISearchBar學(xué)習(xí)是本文要學(xué)習(xí)的內(nèi)容,主要介紹了UISearchBar的使用,不多說,我們先來看詳細(xì)內(nèi)容。關(guān)于UISearchBar的一些問題。
1、修改UISearchBar的背景顏色
UISearchBar是由兩個subView組成的,一個是UISearchBarBackGround,另一個是UITextField. 要IB中沒有直接操作背景的屬性。方法是直接將 UISearchBarBackGround移去 (主要是了解這段話,其實(shí)換背景圖片和背景顏色可以直接換。了解后可用于換searchBar的樣式)
for (UIView *subview in searchBar.subviews)
{
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
{
[subview removeFromSuperview];
break;
}
}
第二種解決的方法:
[[searchBar.subviews objectAtIndex:0]removeFromSuperview];
換cancel的樣式:
for(id cc in [searchBar subviews])
{
if([cc isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cc;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
三、serarBar的屬性及代理:
屬性: | 作用 |
UIBarStyle barStyle | 控件的樣式 |
id delegate | 設(shè)置控件的委托 |
NSString *text | 控件上面的顯示的文字 |
NSString *prompt | 顯示在頂部的單行文字,通常作為一個提示行 |
NSString *placeholder | 半透明的提示文字,輸入搜索內(nèi)容消失 |
BOOL showsBookmarkButton | 是否在控件的右端顯示一個書的按鈕(沒有文字的時(shí)候) |
BOOL showsCancelButton | 是否顯示cancel按鈕 |
BOOL showsSearchResultsButton | 是否在控件的右端顯示搜索結(jié)果按鈕(沒有文字的時(shí)候) |
BOOL searchResultsButtonSelected | 搜索結(jié)果按鈕是否被選中 |
UIColor *tintColor | bar的顏色(具有漸變效果) |
BOOL translucent | 指定控件是否會有透視效果 |
UITextAutocapitalizationType autocapitalizationType | 設(shè)置在什么的情況下自動大寫 |
UITextAutocorrectionType autocorrectionType | 對于文本對象自動校正風(fēng)格 |
UIKeyboardType keyboardType | 鍵盤的樣式 |
NSArray *scopeButtonTitles | 搜索欄下部的選擇欄,數(shù)組里面的內(nèi)容是按鈕的標(biāo)題 |
NSInteger selectedScopeButtonIndex | 搜索欄下部的選擇欄按鈕的個數(shù) |
BOOL showsScopeBar | 控制搜索欄下部的選擇欄是否顯示出來 |
代理列表:
編輯代理
– searchBar:textDidChange:
– searchBar:shouldChangeTextInRange:replacementText:
– searchBarShouldBeginEditing:
– searchBarTextDidBeginEditing:
– searchBarShouldEndEditing:
– searchBarTextDidEndEditing:
– searchBarBookmarkButtonClicked:
– searchBarCancelButtonClicked:
– searchBarSearchButtonClicked:
– searchBarResultsListButtonClicked:
– searchBar:selectedScopeButtonIndexDidChange:
利用UISearchBar的委托事件 textDidChange, 當(dāng)在搜索框中輸入完成后,如果輸入的文本長度>0,可以調(diào)用自己的搜索方法,得到搜索結(jié)果,然后再reloadData,刷新一下。如果輸入文本長 度<0,則需要恢復(fù)到原始數(shù)據(jù)。這個方法可以在邊輸入搜索文本邊顯示結(jié)果。 如果需要按“search”按鈕再搜索,則將上述操作放在searchBarSearchButtonClicked中。
searchBar的范圍控件showsScopeBar,官方學(xué)名叫Scope Buttons。
首先就要設(shè)置這個屬性:
self.searchBar.showsScopeBar = YES;
然后要給他添加按鈕。比如說,這樣:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"BOY",@"GIRL",@"ALL",nil];
還有一個很重要的事情就是我們要實(shí)現(xiàn)這個代理UISearchBarDelegate里的這個方法searchBar:selectedScopeButtonIndexDidChange:。告訴表格,你選擇的范圍是啥。
還有要是設(shè)置默認(rèn)選擇哪個按鈕的話,要設(shè)置這個屬性,像這樣就是默認(rèn)選中第1個啦。
self.searchBar.selectedScopeButtonIndex = 0;
四、UISearchDisplayController使用:
利用UISearchDisplayController可以簡化很多操作,也能達(dá)到搜索的目的。
屬性:
active————是搜索界面可視化,默認(rèn)為no,可用setActive方法設(shè)置.
delegate————委托
searchBar————在searchdisplaycontroller初始化后,searchbar是不可修改的,是readonly屬性的.
searchContentController————管理搜索內(nèi)容的試圖控制器,一般是一個UITableViewController的實(shí)例,意思是針對一個UITableView的內(nèi)容進(jìn)行搜索
searchResultsDataSource————搜索結(jié)果的數(shù)據(jù)源
searchResultsDelegate————搜索結(jié)果的委托
searchResultsTableView————搜索結(jié)果要展示在哪個tableview中(read-only);
searchResultsTitle————搜索結(jié)果視圖的title
初始化一個searchDisplayController:
在正常初始化完一個searchBar后再加上如下代碼:
UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController alloc] initWithSearchBar:theSearchBar contentsController:self];
searchdispalyCtrl.active = NO;
searchdispalyCtrl.delegate = self;
searchdispalyCtrl.searchResultsDelegate=self;
searchdispalyCtrl.searchResultsDataSource = self;
使用UISearchDisplayDelegate的委托方法進(jìn)行搜索操作:
1.搜索狀態(tài)改變:
– searchDisplayControllerWillBeginSearch:
– searchDisplayControllerDidBeginSearch:
– searchDisplayControllerWillEndSearch:
– searchDisplayControllerDidEndSearch:
2.裝載和卸載tableview:
– searchDisplayController:didLoadSearchResultsTableView:
– searchDisplayController:willUnloadSearchResultsTableView:
3.顯示和隱藏tableview:
– searchDisplayController:willShowSearchResultsTableView:
– searchDisplayController:didShowSearchResultsTableView:
– searchDisplayController:willHideSearchResultsTableView:
– searchDisplayController:didHideSearchResultsTableView:
4.搜索條件改變時(shí)響應(yīng):
– searchDisplayController:shouldReloadTableForSearchString:
– searchDisplayController:shouldReloadTableForSearchScope:
searchDisplayController 自身有一個searchResultsTableView,所以在執(zhí)行操作的時(shí)候首先要判斷是否是搜索結(jié)果的tableView,如果是顯示的就是搜索結(jié) 果的數(shù)據(jù),如果不是,是TableView自身的view,則需要顯示原始數(shù)據(jù)。
if(tableView == self.searchDisplayController.searchResultsTableView)
{
arr = [self.filterContent valueForKey:key]; //搜索結(jié)果
}
else
{
arr = [self.localresource valueForKey:key]; //原始數(shù)據(jù)
}
這樣就不需要每次都realoadData了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。