记录下UISearchBar的基本用法,补充:ios 8.0以后,原来的UISearchDisplayController被官方废弃,建议使用UISearchController,下面就简单的记录下这两种控件的使用。

1,UISearchBar,代码如下:

a,声明

class NinethViewController: UIViewController,UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource

b,准备,创建所需要的变量

 var searchBar:UISearchBar!
var hTabV:UITableView! var ctrls:[String] = ["a","b","c","d","e"]
var ctrlsel:[String] = []

c,具体方法和代理方法的实现

func creatUI(){
self.ctrlsel = self.ctrls self.searchBar = UISearchBar(frame:CGRect(x:,y:,width:kScreenWidth,height:))
self.searchBar.delegate = self
// self.searchBar.setShowsCancelButton(true, animated: true)
// self.searchBar.showsSearchResultsButton = true
self.searchBar.placeholder = "请输入你想搜索的内容"
// self.searchBar.showsCancelButton = false
self.view.addSubview(self.searchBar) self.hTabV = UITableView(frame:CGRect(x:,y:+,width:kScreenWidth,height:kScreenHeight-))
self.hTabV.delegate = self
self.hTabV.dataSource = self
self.hTabV.tableFooterView = UIView()
self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell")
self.view.addSubview(self.hTabV)
}

补充,Options属性,可设置如下功能样式:

showsSearchResultsButton  搜索框右边显示一个圆形向下的按钮,单机会发送特殊事件
showsBookmarkButton 搜索框右边会显示一个书本的按钮,单机会发送特殊事件
showsCancelButton 搜索框右边会出现一个“cancel”按钮,单击会发送特殊事件
isSearchResultsButtonSelected 搜索结果按钮被选中
showsSearchResultsButton 搜索结果显示按钮
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
print(searchText)
// 没有搜索内容时显示全部组件
if searchText == "" {
self.ctrlsel = self.ctrls
}else{
self.ctrlsel = []
for ctrl in self.ctrls {
if ctrl.uppercased().hasPrefix(searchText.uppercased()) {
self.ctrlsel.append(ctrl)
}
}
}
self.searchBar.endEditing(true)
self.hTabV.reloadData()
}

c,tableview具体代理方法的实现:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.ctrlsel.count
} func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identiferStr:String = "cell"
let cell = tableView.dequeueReusableCell(withIdentifier: identiferStr, for: indexPath)
cell.textLabel?.text = "\(self.ctrlsel[indexPath.row])"
cell.accessoryType = .disclosureIndicator return cell
}

效果如下:

2,UISearchController的使用

func creatUIs(){

        self.searchBar = UISearchBar(frame:CGRect(x:,y:,width:kScreenWidth,height:))
self.searchBar.showsCancelButton = true
//通过参数searchResultsController传nil来初始化UISearchController,意思是我们告诉search controller我们会用相同的视图控制器来展示我们的搜索结果,如果我们想要指定一个不同的view controller,那就会被替代为显示搜索结果。
searchController = UISearchController(searchResultsController:nil)
//设置代理,searchResultUpdater是UISearchController的一个属性,它的值必须实现UISearchResultsUpdating协议,这个协议让我们的类在UISearchBar文字改变时被通知到,我们之后会实现这个协议。
searchController.searchResultsUpdater = self as? UISearchResultsUpdating
//默认情况下,UISearchController暗化前一个view,这在我们使用另一个view controller来显示结果时非常有用,但当前情况我们并不想暗化当前view,即设置开始搜索时背景是否显示
searchController.dimsBackgroundDuringPresentation = false
//设置默认显示内容
searchController.searchBar.placeholder = "Search here..."
//设置searchBar自适应大小
searchController.searchBar.sizeToFit()
//设置默认显示内容
searchController.searchBar.delegate = self
//设置definesPresentationContext为true,我们保证在UISearchController在激活状态下用户push到下一个view controller之后search bar不会仍留在界面上。
searchController.definesPresentationContext = true self.hTabV = UITableView(frame:CGRect(x:,y:,width:kScreenWidth,height:kScreenHeight))
self.hTabV.delegate = self
self.hTabV.dataSource = self
self.hTabV.tableFooterView = UIView()
self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell")
//设置tableview的头视图为searchController.searchBar
self.hTabV.tableHeaderView = searchController.searchBar
self.view.addSubview(self.hTabV) }

其他的searchbar的代理方法和tableview的代理方法,和上面的一样!

效果如下图:

swift开发之--UISearchBar的使用/UISearchController的使用的更多相关文章

  1. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  2. swift开发多线程篇 - 多线程基础

    swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...

  3. Swift开发第十篇——可变参数函数&初始化方法顺序

    本篇分为两部分: 一.Swift中的可变参数函数 二.初始化方法的顺序 一.Swift中的可变参数函数 可变参数函数指的是可以接受任意多个参数的函数,在 OC 中,拼接字符串的函数就属于可变参数函数 ...

  4. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  5. 《Swift开发指南》

    <Swift开发指南> 基本信息 作者: 关东升    赵志荣 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115366245 上架时间:2014-8-5 出版日期:20 ...

  6. Swift开发中的一些琐碎

    1.Swift中使用OC 1.创建 pch 文件,直接引用需要的头文件  #import"SQLite3.h" 2.修改 pct 路径 ,如下图,就可以使用了 2. Swift 没 ...

  7. 智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程

    引用: 智捷课堂携手51CTO学院.图灵教育联合举办iOS线上培训就业班系列体验公开课. 分享移动开发.移动设计方向最新,最热,最抢眼技术热点以及设计经验.我们每周将最少举办一次公开课,同时会提前安排 ...

  8. 关于《Swift开发指南》背后的那些事

    时间轴(倒叙)2014年8月底在图灵出版社的大力支持下,全球第一本全面.系统.科学的,包含本人多年经验的呕心沥血之作<Swift开发指南>(配有同步视频课程和同步练习)全线重磅推出2014 ...

  9. Swift开发语法

    Swift开发入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者 ...

随机推荐

  1. CTreeCtrl 父结点联动子结点CheckBox

    实现很简单,直接上代码: void CCheckBoxTreeDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控 ...

  2. 【转】Java检测字符串是否有乱码

    package cn.cnnic.ops.learn; import java.util.regex.Matcher;import java.util.regex.Pattern; public cl ...

  3. 1326: The contest(并查集+分组背包)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1326 殷犇有很多队员.他们都认为自己是最强的,于是,一场比赛开始了~ 于是安叔主办了一场比赛,比赛 ...

  4. UserAgent判断浏览器类型或爬虫类型

    ### 浏览器------------------------------- IEMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; T ...

  5. VC调用MATLAB

    最近项目要用VC调用MATLAB,今天闲来无事,在这里稍微总结了一下初级的用法,大家共同学习: 首先在MATLAB Command Window里输入mbuild -setup,一步步走 还有一个me ...

  6. 胖ap和瘦ap区别

    胖AP(FAT AP)模式:适合小面积无线覆盖,AP单独使用,无需TP-LINK无线控制器(AC)即可独立工作,无线组网成本低: 瘦AP(FIT AP)模式:适合大面积无线覆盖,通过TP-LINK无线 ...

  7. Ajax-jQuery_Ajax_实例 ($.ajax、$.post、$.get)

    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. 推荐一篇不错的jQuery Ajax 实例文章,忘记了可以去看看, 地址为:h ...

  8. W/MessageQueue: Handler (android.os.Handler) {4241f8f8} sending message to a Handler on a dead thread

    缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的 稍微纤细一点儿的信息是: Handler (andro ...

  9. 關於 WebClient wc = new WebClient() 下載第三方數據不能進安安信任異常

    報錯異常:The underlying connection was closed: Could not establish trust relationship for SSL/TLS secure ...

  10. R绘制中国地图,并展示流行病学数据

    流行病学的数据讲究“三间分布”,即人群分布.时间分布和空间分布.其中的“空间分布”最好是在地图上展示,才比较清楚.R软件集统计分析与高级绘图于大成,是最适合做这项工作了.关于地图的绘制过程,谢益辉.邱 ...