IOS search bar 从IOS8开始发生了一些变化。有了新的使用方式。

IOS的search bar是这样工作的:
当用户点Search bar,它获得输入焦点后,会出现一个新的页面(ViewController),这个页面就是显示搜索结果的页面。当用户在search bar中输入的时候,这个页面就显示搜索结果。一般结果是显示在 table view中,所以这个搜索结果页面上一般会有个table view。

现在除了search bar之外

还多了一种选择:search controller (UISearchController)

使用search bar需按以下步骤:

1 创建或在Interface builder中拖一个search bar 控件
2 需要手动响应search bar的获取焦点事件,创建搜索结果页面,并把搜索结果页面显示出来。
3 响应search bar的文本框中的的文本改变事件,跟据当前的文本取得结果列表,显示在Table View中。

search controller中包含了search bar和搜索结果页面。搜索结果页面会在需页的时机自动显示,所search controller比单独用search bar更省事。

使用search controller的话,拖一个控件和手动创建,还有不小的差别。在Interface builder中拖一个search controller时,会自动带一个搜索结果页面,而手动创建时,需要手动指定搜索结果页面。

下图这个search bar就是直接拖了一个search controller到一个table view的头部。

可以看到,search controller的search bar嵌到了table view中。

当search bar获得输入焦点时的样子如下:

search bar默认会自动顶走导航栏而占据它的位置,当然这个可以设置search bar的属性禁止它这样做。当search bar获得输入焦点时,出现了半透明的页面,主界面成了半灰色。当你输入字符时,出现搜索结果页面,如下:

当然不论输入什么都不显示任何结果。因为显示结果完全是你自己控制的。你需要响应Search Bar的文本改变事件,在其中计算出搜索结果列表,把列表显示在table view中,用户才能看到结果。

在界面设计器中可以看到拖入search bar时,也增加了一个 view controller:

可以单独为这个view controller设置属性。

手动创建search controller,要调用UISearchController的初始化方法—
-(instancetype)initWithSearchResultsController:(nullable UIViewController *)searchResultsController;
其参数 searchResultsController是显示结果的页面。不同于拖控件,必须传一个结果页面给它才行。那么这个结果页面我们可以自行设计, 但大多数都用tableview来显示结果,所以只接用一个Table view controller一般就够了。

很多app对于搜索页是这样设计的:
在主页面的导航栏上有一个搜索按钮


页面1

当点击的时候进入另一个页面,在这个页面才看到search bar


页面2

并且还有可能有一些现成的关键词,都放在按钮里,点一下直接搜索那些关键词。当在search bar中输入的时候就显示出结果页面。
但是如果使用Search bar controller,而且又想把search bar显示在导航栏中的话,似乎是不可能实现的。Search bar controller的行为会变得很奇怪。这时候就要单独使用search bar了。

也就是说在上面的页面2中的search bar是一个单独的search bar。它的行为我们的得自己实现。我们响应它的获取输入焦点事件,在其中显示结果页面。结果页面一般是显示在导航栏之下的,所以结果页面不应是一个view controller,而直接用一个table view最行了。计算好这个table view的合适位置,显示出来即可。

要响应search bar 中的事件,当然是用协议和代理的方式。search bar的代理UISearchBarDelegate中有很多方法。大部分是用于通知代理发生了什么事。代理实现方法
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
就能响应开获取焦点事件,如:

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{
    //在导航栏下显示结果table view,应该用autolayout,此处省事直接减去了导航栏底部的y值
    self.resultTV.frame=CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64);

    return YES;
    }

resultTV是提前创建的table view。

代理中还有其它很多方法,可以让我们随时监测用户输入的变化,可以在每次变化时都计算新的结果并显示到table view中。

IOS9 UISearchBar详解相关推荐

  1. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  2. xib、stoaryboard详解

    一.xib.sb简介 1.xib执行效率的确没有代码效率高,因为加载要多一步--把xib文件加载到内存中 2.SB还会省去很多页面跳转之间的胶水代码(segue),甚至不用写代码就能实现在各个页面中切 ...

  3. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  4. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

  5. iOS CoreLocation和MapKit详解

    引言 位置定位几乎是App中的不可或缺的功能,功能分为两部分:一部分是使用CoreLocation框架来获取地理位置经纬度:另一部分:使用MapKit将经纬度以UI的形式展示出来. 使用场景 导航软件 ...

  6. IPv6技术详解:基本概念、应用现状、技术实践(上篇)(转)

    最近在搞IPV6的项目,百度搜了下,这个还是写的很清楚,转载下, 原文是这里,https://www.cnblogs.com/imstudy/p/9056334.html 严禁转载,请告知 本文来自微 ...

  7. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  8. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  9. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

最新文章

  1. GridView,Repeater分页控件:WebPager(开源)
  2. 2020年,数据中心的绿色技术演进与创新
  3. linux挂载磁盘分区,Linux 新磁盘分区与挂载
  4. Java List 分页
  5. 34、JAVA_WEB开发基础之EL表达式和标签
  6. 6.824 Raft lesson4 2020(一)
  7. Java Duration类| isZero()方法与示例
  8. WEB编程学习之配置阿里云+宝塔+WordPress
  9. [Redis] redis-cli 命令总结
  10. 推荐系统-协同过滤原理与实现
  11. 财报汇总 | 中国生物制药、格林酒店、海亮教育、洪恩教育等5家企业公布最新业绩...
  12. 2023年北京邮电大学计算机考研信息汇总
  13. 云渲染最全计费规则合集
  14. python支持char数据类型吗_python有char类型吗,
  15. 正则表达式常用验证及打油诗一首
  16. DTU自动化控制服务端软件
  17. 计算机毕业设计SSM房屋租赁管理系统设计【附源码数据库】
  18. Comsol 6.0 安装
  19. java 求1000以内完数
  20. chrome 缺少chrome_elf.dll

热门文章

  1. Java常见异常类型及原因分析
  2. 干货|利用Python自动根据数据生成降雨量统计分析报告
  3. C/C++--球球大作战项目(简单版)
  4. css布局作业:京东首页轮播图
  5. java毕业设计美容中心在线后台管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  6. dcdc6V~60V降压型LED照明恒流驱动器,兼容PT4121
  7. WIN10用virtualbox装ubuntu系统清理磁盘方法
  8. SAP ABAP ZIF 实现数据接口的增量查询
  9. Hacker The Box 之 Responder 7
  10. Git——pull request提交实战