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