1. 程式人生 > 實用技巧 >UISearchBar的使用以及下拉列表框的實現

UISearchBar的使用以及下拉列表框的實現

在IOS混飯吃的同志們都很清楚,搜尋框在移動開發應用中的地位。今天我們就結合下拉列表框的實現來聊聊UISearchBar的使用。本人新入行的菜鳥一個,不足之處請多多指教。直接上程式碼。

UISearchBar控制元件的宣告:(在控制器DownListViewController中)

  1. @property(nonatomic,retain)UISearchBar*searchBar;

控制元件的初始化:

  1. _searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];
  2. _searchBar.placeholder=@"test";//設定佔位符
  3. _searchBar.delegate=self;//設定控制元件代理

當然,做完這些工作之後,我們還要在將控制元件新增到父檢視之上,也可以把他設定成UITableView的tableHeaderView屬性值,由於大家需求不一,這裡就不再給出程式碼。

前面,我們設定了控制元件的代理,當然我們必須讓控制器(DownListViewController)的 .h 檔案實現 UISearchBarDelegate 協議,然後我們繼續, 我們要在 .m 檔案中實現協議方法:

  1. #pragmamark-
  2. #pragmamarkUISearchBarDelegate
  3. //搜尋框中的內容發生改變時 回撥(即要搜尋的內容改變)
  4. -(void)searchBar:(UISearchBar*)searchBartextDidChange:(NSString*)searchText{
  5. NSLog(@"changed");
  6. if(_searchBar.text.length==0){
  7. [selfsetSearchControllerHidden:YES]; //控制下拉列表的隱現
  8. }else{
  9. [selfsetSearchControllerHidden:NO];
  10. }
  11. }

  12. -(BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar{
  13. searchBar.showsCancelButton
    =YES;
  14. for(id cc in [searchBar subviews])
    {
    if([cc isKindOfClass:[UIButton class]])
    {
    UIButton *btn = (UIButton *)cc;
    [btn setTitle:@"取消" forState:UIControlStateNormal];
    }
    }
  15. NSLog(@"shuouldbegin");
  16. returnYES;
  17. }
  18. -(void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar{
  19. searchBar.text=@"";
  20. NSLog(@"didbegin");
  21. }
  22. -(void)searchBarTextDidEndEditing:(UISearchBar*)searchBar{
  23. NSLog(@"didend");
  24. searchBar.showsCancelButton=NO;
  25. }
  26. -(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{
  27. NSLog(@"searchclicked");
  28. }
  29. //點選搜尋框上的 取消按鈕時 呼叫
  30. -(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar{
  31. NSLog(@"cancleclicked");
  32. _searchBar.text=@"";
  33. [_searchBarresignFirstResponder];
  34. [selfsetSearchControllerHidden:YES];
  35. }

至此,搜尋框的實現就搞定了,怎麼樣簡單吧。下面我們來講講下拉列表框的實現,先說說他的實現原理或者是思路吧。下拉列表框我們用一個控制器來實現,我們新建一個控制器SearchViewController.

  1. @interfaceSearchViewController:UITableViewController
  2. @end

在 .m 檔案中,我們實現該控制器

  1. -(id)initWithStyle:(UITableViewStyle)style
  2. {
  3. self=[superinitWithStyle:style];
  4. if(self){
  5. //Custominitialization
  6. }
  7. returnself;
  8. }
  9. -(void)viewDidLoad
  10. {
  11. [superviewDidLoad];
  12. self.tableView.layer.borderWidth=1;
  13. self.tableView.layer.borderColor=[[UIColorblackColor]CGColor];
  14. }

然後實現控制器的資料來源,

  1. #pragmamark-
  2. #pragmamarkTableviewdatasource

  3. -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{
  4. return1;
  5. }
  6. -(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{
  7. // 返回列表框的下拉列表的數量
  8. return3;
  9. }
  10. //Customizetheappearanceoftableviewcells.
  11. -(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{
  12. staticNSString*CellIdentifier=@"Cell";
  13. UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
  14. if(cell==nil){
  15. cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier];
  16. }
  17. //Configurethecell...
  18. NSUIntegerrow=[indexPathrow];
  19. cell.textLabel.text=@"downlist";
  20. returncell;
  21. }

這樣列表框的控制器就實現了。接下來我們就來看看怎麼讓出現、隱藏。這點我們利用UIView的動畫效果來實現,我們在DownListViewController控制器中 增加一個方法:

  1. -(void)setSearchControllerHidden:(BOOL)hidden{
  2. NSIntegerheight=hidden?0:180;
  3. [UIViewbeginAnimations:nilcontext:nil];
  4. [UIViewsetAnimationDuration:0.2];
  5. [_searchController.viewsetFrame:CGRectMake(30,36,200,height)];
  6. [UIViewcommitAnimations];
  7. }

我們只需呼叫該方法就可以了。現在我們看看DownListViewController的佈局方法

  1. -(void)viewDidLoad
  2. {
  3. [superviewDidLoad];
  4. _searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0,0,320,40)];
  5. _searchBar.placeholder=@"test";
  6. _searchBar.delegate=self;
  7. _tableview=[[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];
  8. _tableview.dataSource=self;
  9. _tableview.tableHeaderView=_searchBar;
  10. _searchController=[[SearchViewControlleralloc]initWithStyle:UITableViewStylePlain];
  11. [_searchController.viewsetFrame:CGRectMake(30,40,200,0)];
  12. [self.viewaddSubview:_tableview];
  13. [self.viewaddSubview:_searchController.view];
  14. }

這樣一切都搞定了。

好了,總結一下:

我們用了兩個控制器:DownListViewController(搜尋框的實現 和 控制下拉列表框的出現與隱藏)和SearchViewController(下拉列表框的實現)。在DownListViewController中我們宣告並初始化 UISearchBar和SearchViewController(高度開始設定為零),用動畫來實現下拉列表框的出現與隱藏。

轉載於:https://blog.51cto.com/izhuaodev/1102408