UISearchBar的使用以及下拉列表框的實現
在IOS混飯吃的同志們都很清楚,搜尋框在移動開發應用中的地位。今天我們就結合下拉列表框的實現來聊聊UISearchBar的使用。本人新入行的菜鳥一個,不足之處請多多指教。直接上程式碼。
UISearchBar控制元件的宣告:(在控制器DownListViewController中)
- @property(nonatomic,retain)UISearchBar*searchBar;
控制元件的初始化:
- _searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];
- _searchBar.placeholder=@"test";//設定佔位符
- _searchBar.delegate=self;//設定控制元件代理
當然,做完這些工作之後,我們還要在將控制元件新增到父檢視之上,也可以把他設定成UITableView的tableHeaderView屬性值,由於大家需求不一,這裡就不再給出程式碼。
前面,我們設定了控制元件的代理,當然我們必須讓控制器(DownListViewController)的 .h 檔案實現 UISearchBarDelegate 協議,然後我們繼續, 我們要在 .m 檔案中實現協議方法:
- #pragmamark-
- #pragmamarkUISearchBarDelegate
- //搜尋框中的內容發生改變時 回撥(即要搜尋的內容改變)
- -(void)searchBar:(UISearchBar*)searchBartextDidChange:(NSString*)searchText{
- NSLog(@"changed");
- if(_searchBar.text.length==0){
- [selfsetSearchControllerHidden:YES]; //控制下拉列表的隱現
- }else{
- [selfsetSearchControllerHidden:NO];
- }
- }
-
- -(BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar{
- searchBar.showsCancelButton
- for(id cc in [searchBar subviews])
{
if([cc isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cc;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
} - NSLog(@"shuouldbegin");
- returnYES;
- }
- -(void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar{
- searchBar.text=@"";
- NSLog(@"didbegin");
- }
- -(void)searchBarTextDidEndEditing:(UISearchBar*)searchBar{
- NSLog(@"didend");
- searchBar.showsCancelButton=NO;
- }
- -(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{
- NSLog(@"searchclicked");
- }
- //點選搜尋框上的 取消按鈕時 呼叫
- -(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar{
- NSLog(@"cancleclicked");
- _searchBar.text=@"";
- [_searchBarresignFirstResponder];
- [selfsetSearchControllerHidden:YES];
- }
至此,搜尋框的實現就搞定了,怎麼樣簡單吧。下面我們來講講下拉列表框的實現,先說說他的實現原理或者是思路吧。下拉列表框我們用一個控制器來實現,我們新建一個控制器SearchViewController.
- @interfaceSearchViewController:UITableViewController
- @end
在 .m 檔案中,我們實現該控制器
- -(id)initWithStyle:(UITableViewStyle)style
- {
- self=[superinitWithStyle:style];
- if(self){
- //Custominitialization
- }
- returnself;
- }
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- self.tableView.layer.borderWidth=1;
- self.tableView.layer.borderColor=[[UIColorblackColor]CGColor];
- }
然後實現控制器的資料來源,
- #pragmamark-
- #pragmamarkTableviewdatasource
- -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{
- return1;
- }
- -(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{
- // 返回列表框的下拉列表的數量
- return3;
- }
- //Customizetheappearanceoftableviewcells.
- -(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{
- staticNSString*CellIdentifier=@"Cell";
- UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
- if(cell==nil){
- cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier];
- }
- //Configurethecell...
- NSUIntegerrow=[indexPathrow];
- cell.textLabel.text=@"downlist";
- returncell;
- }
這樣列表框的控制器就實現了。接下來我們就來看看怎麼讓出現、隱藏。這點我們利用UIView的動畫效果來實現,我們在DownListViewController控制器中 增加一個方法:
- -(void)setSearchControllerHidden:(BOOL)hidden{
- NSIntegerheight=hidden?0:180;
- [UIViewbeginAnimations:nilcontext:nil];
- [UIViewsetAnimationDuration:0.2];
- [_searchController.viewsetFrame:CGRectMake(30,36,200,height)];
- [UIViewcommitAnimations];
- }
我們只需呼叫該方法就可以了。現在我們看看DownListViewController的佈局方法
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- _searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];
- _searchBar.placeholder=@"test";
- _searchBar.delegate=self;
- _tableview=[[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];
- _tableview.dataSource=self;
- _tableview.tableHeaderView=_searchBar;
- _searchController=[[SearchViewControlleralloc]initWithStyle:UITableViewStylePlain];
- [_searchController.viewsetFrame:CGRectMake(30,40,200,0)];
- [self.viewaddSubview:_tableview];
- [self.viewaddSubview:_searchController.view];
- }
這樣一切都搞定了。
好了,總結一下:
我們用了兩個控制器:DownListViewController(搜尋框的實現 和 控制下拉列表框的出現與隱藏)和SearchViewController(下拉列表框的實現)。在DownListViewController中我們宣告並初始化 UISearchBar和SearchViewController(高度開始設定為零),用動畫來實現下拉列表框的出現與隱藏。
轉載於:https://blog.51cto.com/izhuaodev/1102408