iOS UISearchController 的使用方法
iOS UISearchController 的使用方法
UISearchController 让用户在 UISearchBar 上输入搜索关键词,展示搜索结果或者进行其他操作。UISearchController 把两个控制器(UIViewController)连在一起。父控制器放置 UISearchBar 控件。当用户点击搜索框时,UISearchBar 会移到屏幕顶部;输入搜索关键词,UISearchBar 下面出现子控制器的view
。当然,也可以用代码使 UISearchBar 和子控制器展示出来,即便父控制器没有放置 UISearchBar。
一般用法
在父控制器中创建子控制器
用子控制器创建 UISearchController,通常会把 UISearchController 变成父控制器的属性
设置 UISearchController 的
searchResultsUpdater
属性通常会在父控制器上放置 UISearchController 的
searchBar
把父控制器
definesPresentationContext
属性设置为 true
以下为父控制器代码示例
let searchResultsVC = SearchResultsVC(allStrings: allStrings)
searchController = UISearchController(searchResultsController: searchResultsVC)
searchController.searchResultsUpdater = searchResultsVC;
let tableView = UITableView(frame: view.bounds)
tableView.dataSource = self
view.addSubview(tableView)
tableView.tableHeaderView = searchController.searchBar;
tableView.tableFooterView = UIView()
definesPresentationContext = true;
UISearchController 的searchResultsUpdater
属性一般设置为父控制器或子控制器。这个属性的值要符合 UISearchResultsUpdating 协议,实现updateSearchResults(for searchController: UISearchController)
方法。这个方法会在searchBar
变为第一响应者(比如,当用户点击搜索框,键盘弹出),以及搜索关键词改变时调用。在这个方法中写入执行搜索、更新 UI 的代码。
以上代码将子控制器作为 UISearchController 的searchResultsUpdater
。假设子控制器的数据源为 allStrings 和 strings,均为含 String 的 Array。其中,allStrings 为常量,包含所有的 String;strings 包含符合搜索条件的 String,需要在用户输入时更新。搜索条件为,含有用户输入的内容,不区分大小写。用 UITableView 展示搜索结果。在updateSearchResults(for searchController: UISearchController)
方法中,获取 searchBar 的text
,更新 strings,更新 UI。
以下是子控制器代码示例
func updateSearchResults(for searchController: UISearchController) {
strings.removeAll()
if let text = searchController.searchBar.text?.uppercased(), !text.isEmpty {
strings = allStrings.filter { $0.contains(text) }
}
tableView.reloadData()
}
改变样式
默认情况下,用户点击搜索框,导航栏(navigation bar)隐藏,UISearchBar 上移,下面能看到父控制器,但有灰色蒙版遮挡。点击灰色蒙版,退回父控制器。把 UISearchController 的hidesNavigationBarDuringPresentation
属性设置为false,则导航栏不隐藏。把 UISearchController 的dimsBackgroundDuringPresentation
属性设置为false,则灰色蒙版不显示,能点击父控制器。
搜索框为空时,子控制器隐藏
如果 UISearchController 的searchBar
已经放置在父控制器上,用户点击搜索框时,UISearchBar 会上移至屏幕顶部,键盘弹出。此时会调用updateSearchResults(for searchController: UISearchController)
方法,但子控制的view
没有出现,isHidden
为 true。输入内容后,子控制器的view
才出现。清空输入的内容,子控制器的view
消失。如果要在搜索框为空时也显示子控制器,在updateSearchResults(for searchController: UISearchController)
方法中加入searchController.searchResultsController?.view.isHidden = false
即可。
代码展示 UISearchBar 和子控制器的方法
在父控制中可以用代码来展示 UISearchBar 和子控制器,具体实现方法要看 UISearchController 的searchBar
是否放置在父控制器上。
如果 UISearchController 的searchBar
放置在父控制器上
UISearchBar 上移,弹出键盘(和用户点击搜索框一样的效果)
searchController.searchBar.becomeFirstResponder()
UISearchBar 上移,但不弹出键盘
present(searchController, animated: true, completion: nil)
或者
searchController.isActive = true
如果 UISearchController 的searchBar
不在父控制器上
UISearchBar 从顶部出现,弹出键盘
present(searchController, animated: true, completion: nil)
搜索框一出来就成为第一响应者,键盘会弹出,不知道怎么禁止键盘弹出。当然,展示搜索框却不弹出键盘,是奇怪的需求。
代码已上传 GitHub:https://github.com/Silence-GitHub/SearchControllerDemo
转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6405545.html
iOS UISearchController 的使用方法的更多相关文章
- iOS-提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS中的过期方法和新的替代方法
关于iOS中的过期方法和新的替代方法 1.获取某些类的UINavigationBar的统一外观并设置UINavigationbar的背景 注:方法名改了但是基本使用方法不变 + (instancety ...
- opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...
- iOS开发——实用篇&提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS与HTML5交互方法总结(转)
今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢? 还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...
- IOS常见的加密方法,常用的MD5和Base64
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- iOS与HTML5交互方法总结(修正)
摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...
- UIView封装动画--iOS利用系统提供方法来做转场动画
UIView封装动画--iOS利用系统提供方法来做转场动画 UIViewAnimationOptions option; if (isNext) { option=UIViewAnimationOpt ...
- UIView封装动画--iOS利用系统提供方法来做关键帧动画
iOS利用系统提供方法来做关键帧动画 ios7以后才有用. /*关键帧动画 options:UIViewKeyframeAnimationOptions类型 */ [UIView animateKey ...
随机推荐
- 《SpringMVC数据绑定入门》笔记
基本类型 最好使用封装类型 简单多数据&多层级对象 简单多数据 单个对象,直接使用属性名=值即可 多层级对象 属性.属性=值即可 同属性多对象 WebDataBinder只在当前类中生效,不是 ...
- 02 easyui -parser
parser: 页面节点class=“easyui-” +组件名(在plugins里) ,则可以 渲染成相应的组件.
- 【Xilinx-Petalinux学习】-06-OpenCV通过USB摄像头采集图像。
占位, 实现USB摄像头的图像采集与保存
- Sublime text追踪函数插件
Sublime Text2/3怎样在Ubuntu中配置CTags插件 | 浏览:1278 | 更新:2014-03-05 10:34 1 2 3 4 5 6 7 分步阅读 本文详解在Ubuntu Li ...
- android入门:activity之间跳转,并且回传参数
介绍: 两个activity进行跳转,在跳转过程中,将message由MainActivity传递到secondActivity,并且当secondActivity退回至MainAct ...
- OC 优化目录
把 main. info 和 appdelegate 放到自己的新建目录 1.去掉info.plist的警告 在build phases->copy Bundle Resources中去掉inf ...
- OS X EI Capitan 10.11 & xcode 7.0 beta(7A120f) -- cocoapods安装失败
1.sudo gem install cocoapods: ERROR:While executing gem ... (Errno:EPERM) Operation not permitted - ...
- windows中如何查看某个端口被谁占用
说明:本人操作系统为win7 x64,文章转自http://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html,加上本人的注释. 开始--- ...
- v4l2视频采集摄像头
v4l2 --是Linux内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口./dev/vidioX 1.打开设备文件 fd=open("/dev/video3&qu ...
- win32 安装 xcache扩展
今天整了一上午,才整明白. 我的系统是是 win7 32位 ,用的环境是 Wamp,php版本是5.3.5,后来在http://xcache.lighttpd.net/pub/Releases/3.0 ...