UISearchDisplayController搜索(iOS8前)

搜索功能,基本每个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. 设置tableView的tableHearderView为searchBar
    1     _tableView.tableHeaderView = _searchBar;
  5. 更改searchBar的Cancel按钮为“取消”,注意:因为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
时间: 2024-10-06 20:40:12

UISearchDisplayController搜索(iOS8前)的相关文章

搜索栏UISearchBar和UISearchController(UISearchDisplayController在iOS8.0之后就不推荐使用)

iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜 索栏现在默认自家的神马搜索,现在不管是社交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是不一样的.iOS中的搜索栏实现起来相对 简单一点,网上也有很多参考资料,不过靠谱的不是很多,很多都是iOS 8.0之前的实现,iOS 8.0上的实现貌似很少看到,可以运行,不过会看到searchDisplayController'

Xcode中的搜索结果前的字母P,M,C,f代表什么

C: class 类 T: typedef 通常是枚举类别的定义 E:enum 枚举 Pr:protocol 协议 M:method 方法 V:value 值 P: property 属性 K: 枚举 .常量 G: global全局变量 f: 函数 #: #define指令 版权声明:本文为博主原创文章,转载请标明出处.

iOS8 UISearchViewController搜索功能讲解

在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的使用相比之下简单很多,  需要签订两个代理协议UISearchControllerDelegate, UISearchResultsUpdating.还有一个很重要的属性self.searchVC.active,,返回的BOOL如果为yes,UITableView的数据源应该为搜索后的数组即resu

【学习ios之路:UI系列】(UISearchBar,UISearchDisplayController) 和UISearchController(iOS8新特性)

1.UISearchBar(效果如下:) ①创建UISearchBar对象 //初始化,定义frame UISearchBar *bar = [[UISearchBar alloc] initWithFrame:CGRectMake (0, 50, self.view.frame.size.width, 80)]; //添加到控制器的视图上 [self.view addSubview:bar]; ②UISerachBar的属性 //autocapitalizationType:包含4种类型,但是

升级IOS8游戏上传自定义头像功能失效的问题

为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VIP之后就可使用了上传自定义功能的特权,我们的游戏就"复制"了该功能.   具体实现就是点击游戏内换自定义头像的按钮后,调用不同平台相应的方法,获取用户选择的图片数据,然后将图片裁剪再传给后台保存至特定的目录下.   测试设备是ipad air2,系统版本IOS 8.0.1,点击游戏内的按钮

UISearchBar和UISearchDisplayController

UISearchBar和UISearchDisplayController实例应用 程序介绍:获取系统通讯录,利用 UISearchBar和UISearchDisplayController实现搜索功能 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate,UISearc

从神马搜索到阿里上市 马云到底想要干什么?

笔者注:不疯魔不成活,这句话往往形容那些处事怪异,最后却走向成功的人.而就目前来看全球绝大多数成功的名流,都属于这种偏执型的人.乔布斯.扎克伯格.马云等,莫不如此.而近来,在国内互联网领域,最引人注意的无疑就是马云及阿里巴巴.虽然马云已经在明面上隐居幕后,但在阿里巴巴上市的关键时刻,他依然为阿里定下了"增肥"的路子. 事实上,阿里巴巴"增肥"的路子早就已经可以看出端倪.在上市消息传出以前,投资新浪微博.收购高德.战略投资UC.在移动端布局"来往"

emacs搜索和替换

搜索/替换(Seach/Replace) C-s 向后搜索 C-r 向前搜索 C-g 回到搜索开始前的位置(如果你仍然在搜索模式中) M-% 询问并替换(query replace) Space或y 替换当前匹配 Del或n 不要替换当前匹配 . 仅仅替换当前匹配并退出(替换) , 替换并暂停(按Space或y继续) ! 替换以下所有匹配 ^ 回到上一个匹配位置 RETURN或q 退出替换 使用正则表达式(Regular expression)搜索/替换 可在正则表达式中使用的符号: ^ 行首

【django】京东等大型网站的混合搜索是怎么实现的?

混合搜索在各大网站如京东.淘宝都有应用,他们的原理都是什么呢?本博文将为你介绍它们的实现过程. 混合搜索的原理,用一句话来说就是:关键字id进行拼接. 混合搜索示例: 数据库设计: 视频方向: class Direction(models.Model): weight = models.IntegerField(verbose_name='权重(按从大到小排列)', default=0) name = models.CharField(verbose_name='名称', max_length=