iOS UISearchController的使用方法

 更新时间:2017年02月21日 10:24:32   作者:Silence_cnblogs  
本文主要介绍了iOS UISearchController的使用方法,具有很好的参考价值,下面跟着小编一起来看下吧

UISearchController 让用户在 UISearchBar 上输入搜索关键词,展示搜索结果或者进行其他操作。UISearchController 把两个控制器(UIViewController)连在一起。父控制器放置 UISearchBar 控件。当用户点击搜索框时,UISearchBar 会移到屏幕顶部;输入搜索关键词,UISearchBar 下面出现子控制器的view。当然,也可以用代码使 UISearchBar 和子控制器展示出来,即便父控制器没有放置 UISearchBar。

一般用法

  1. 在父控制器中创建子控制器
  2. 用子控制器创建 UISearchController,通常会把 UISearchController 变成父控制器的属性
  3. 设置 UISearchController 的searchResultsUpdater属性
  4. 通常会在父控制器上放置 UISearchController 的searchBar
  5. 把父控制器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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • iOS中键盘 KeyBoard 上添加工具栏的方法

    iOS中键盘 KeyBoard 上添加工具栏的方法

    大iOS中 键盘 KeyBoard 上怎么添加工具栏呢?大致思路是提前创建好工具栏,在键盘弹出的时候将工具栏显示出来,在键盘消失的时候让工具栏隐藏。具体实现代码大家参考下本文吧
    2017-08-08
  • iOS创建对象的不同姿势详解

    iOS创建对象的不同姿势详解

    这篇文章主要介绍了iOS创建对象的不同姿势,文中介绍的很详细,对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习吧。
    2017-02-02
  • ios实现简单随便移动的AR功能

    ios实现简单随便移动的AR功能

    这篇文章主要为大家详细介绍了ios实现简单随便走的AR功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Objective-C 代码与Javascript 代码相互调用实例

    Objective-C 代码与Javascript 代码相互调用实例

    这篇文章主要介绍了Objective-C 代码与Javascript 代码相互调用实例的相关资料,现在的APP 应用有时候会调用网页上的内容,为了增加用户体验,这里写下个实例,需要的朋友可以参考下
    2016-10-10
  • 浅谈iOS推送证书生成pem文件(详细生成过程)

    浅谈iOS推送证书生成pem文件(详细生成过程)

    这篇文章主要介绍了浅谈iOS推送证书生成pem文件(详细生成过程),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • iOS开发技巧之WeakSelf宏的进化详解

    iOS开发技巧之WeakSelf宏的进化详解

    在程序中我们经常用到Block,但写weak self 时会比较繁琐,下面这篇文章主要给大家介绍了关于iOS开发技巧之WeakSelf宏的进化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-05-05
  • iOS实现类似格瓦拉电影的转场动画

    iOS实现类似格瓦拉电影的转场动画

    这篇文章主要给大家介绍了利用iOS如何实现类似格瓦拉电影的转场动画,文中给出了详细步骤实现代码,对大家的学习和理解很有帮助,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-11-11
  • IOS开发中禁止NavigationController的向右滑动返回

    IOS开发中禁止NavigationController的向右滑动返回

    这篇文章主要介绍了IOS开发中禁止NavigationController的向右滑动返回的相关资料,需要的朋友可以参考下
    2017-03-03
  • iOS开发中Quartz2D的基本使用方式举例

    iOS开发中Quartz2D的基本使用方式举例

    这篇文章主要介绍了iOS开发中Quartz2D的基本使用方式举例,需要的朋友可以参考下
    2015-11-11
  • iOS 控件封装(又名拧螺丝)之排序按钮的开发

    iOS 控件封装(又名拧螺丝)之排序按钮的开发

    排序按钮是实际开发中比较常见的一种控件,这篇文章主要介绍了iOS 开发之排序按钮,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论