码迷,mamicode.com
首页 > 移动开发 > 详细

UISearchDisplayController搜索(iOS8前)

时间:2015-06-01 22:08:52      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

搜索功能,基本每个app标配。

实现起来很简单,但是iOS8后苹果建议使用UISearchController,官方Demo:Table Search with UISearchController

实际开发基本也都还是用的老的UISearchDisplayController+UISearchBar的方案,因为要照顾一些版本低的用户。

发现时间长没写都忘记差不多了,闲暇之余,一起整理下,方便以后翻阅。

这篇先从UISearchDisplayController开始。比较简单,就不罗嗦了,直接贴代码。

  1. UITableView步骤略去。
  2. 新建一个UISearchBar

    1     _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
    2     _searchBar.delegate = self;
    3     _searchBar.placeholder = @"搜索";
    4     _searchBar.backgroundColor = [UIColor clearColor];
  3. 根据searchBar新建一个UISearchDisplayController

    1     _searchDisplayCtl = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
    2     _searchDisplayCtl.delegate = self;
    3     _searchDisplayCtl.searchResultsDataSource = self;
    4     _searchDisplayCtl.searchResultsDelegate = self;
  4. 设置tableViewtableHearderViewsearchBar

    1     _tableView.tableHeaderView = _searchBar;
  5. 更改searchBarCancel按钮为取消,注意:因为iOS7后和之前的层次结构不同,iOS7前遍历一次即可拿到,iOS7后需要遍历两次,在UISearchBar的代理方法中设置

     1 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
     2 {
     3     for (id sView in searchBar.subviews)
     4     {
     5         if ([sView isKindOfClass:[UIButton class]])
     6         {
     7             [(UIButton *)sView setTitle:@"取消" forState:UIControlStateNormal];
     8             break;
     9         }
    10         for (id ssView in [sView subviews])
    11         {
    12             if ([ssView isKindOfClass:[UIButton class]])
    13             {
    14                 [(UIButton *)ssView setTitle:@"取消" forState:UIControlStateNormal];
    15             }
    16         }
    17     }
    18     
    19     // 默认只要已进入搜索状态,cancel按钮就会出现,
    20     // 但是不知道为什么有时候没出来,严谨性,我们就自己加上下面这段。
    21     [searchBar setShowsCancelButton:YES animated:YES];
    22 }

     

  6. 最后一步,搜索展示结果。UISearchDisplayController代理中处理
     1 #pragma mark - UISearchDisplayController
     2 - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
     3 {
     4     [_resultList removeAllObjects];
     5     
     6     for (NSString *subString in _dataList)
     7     {
     8         if ([subString rangeOfString:searchString].location != NSNotFound)
     9         {
    10             [_resultList addObject:subString];
    11         }
    12     }
    13     
    14     return YES;
    15 }

  最简便的一个搜索完成了,UISearchBar和UISearchDisplayController还提供给我们很多其他的代理方法,都是些常规读名取意型的,就不一一介绍了,实际用到了看下就可以了。苹果封装的已经很好,而且UI也蛮漂亮的,所以我们也没必要自己写一个。

  不过,实际过程中有两点可能会用到。网上也挺多资料,大概整理下。方便以后查找使用。

  • 更改UISearchBar的背景

    项目中可能会有需要我们改变其背景颜色或者背景图片的需求,其大概实现原理类似更改cancel按钮的title。需要注意的还是iOS版本不同,层次结构不同

    

  • 关于ScopeBar

 

UISearchDisplayController搜索(iOS8前)

标签:

原文地址:http://www.cnblogs.com/ioshevin/p/4544870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!