iOS - Swift UISearchController的取消按钮

UISearchController�的取消按钮

关于UISearchController�的设置就不多说了,可以参考《UISearchController�仿微信搜索框》或者自行上网查找。 情况 本人想实现微信通讯录上方的搜索框功能,但在搜索框的取消按钮的设置这个卡住,在网上搜了个遍,没有�合适的做法,经过不懈的探索,终于找到解决方案,遂前来记录一下。

方案

添加两个属性

// 记录是否已经找到取消按钮
lazy var hasFindCancelBtn: Bool = {
    return false
}()
// 定时器(用来定时查找取消按钮)
lazy var link: CADisplayLink = {
    CADisplayLink(target: self, selector: #selector(findCancel))
}()

提供查找并设置取消按钮的方法

func findCancel() {
    let btn = searchBar.value(forKey: "_cancelButton") as AnyObject
    if btn.isKind(of: NSClassFromString("UINavigationButton")!) {
        LXFLog("就是它")
        link.invalidate()
        link.remove(from: RunLoop.current, forMode: .commonModes)
        hasFindCancelBtn = true
        let cancel = btn as! UIButton
        cancel.setTitleColor(UIColor.red, for: .normal)
        cancel.setTitleColor(UIColor.orange, for: .highlighted)
    }
}

代理方法

设置代理为当前控制器,并实现代理方法

searchBar.delegate = self
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
    if !hasFindCancelBtn {
        link.add(to: RunLoop.current, forMode: .commonModes)
    }
}

效果

附上相关项目:Swift 3.0 高仿微信

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动端开发

环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

前言: 环信的SDK在公司的项目中有用到,现在用到的是群聊的部分,这里我们分析总结一下自己对环信给的DEMO大概的拆解一下,说说我们怎么样充分的利用这个de...

3078
来自专栏林德熙的博客

win10 uwp 模拟网页输入 使用 cookie

首先创建一个 WebView ,接下来的所有输入都需要在 NavigationCompleted 之后才可以使用。

512
来自专栏林德熙的博客

WPF 播放 gif

本文告诉大家如何在 WPF 播放 Gif 图片,提供了几个方法进行播放,包括比较性能。

1311
来自专栏Aloys的开发之路

LaTeX内容总结

心得 Sublime + LaTeXTools 简直噩梦,决不再碰 TeX最好用的发行版就是Tex Live TeX Live可以在Linux、Windows平...

25110
来自专栏coding for love

在线商城项目16-头部前端逻辑修改

这是不合理的,我们应该根据登录态来做一个区别显示。未登录情况下显示login和购物车图标。已登录情况下显示用户名,logout,购物车图标。

551
来自专栏生信技能树

shell界面颜值知多少

颜色值设置: PS1中设置字符颜色的格式为:[\e[F;Bm],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47。

1852
来自专栏落影的专栏

iOS开发笔记(二)

前言 开发做笔记是好习惯,总结分享是巩固记忆。 遇到问题,思考其背后的原因、原理。 AFNetworking 1、progress回调block,不在主线程;...

3367
来自专栏Android先生

Android 9.0适配及部分新特性介绍

在最开始针对速贷进行Android9.0版本的适配时,我使用的是真机是vivo X21A,将targetSdkVersion升到28,运行发现网络请求全报400...

6534
来自专栏程序员互动联盟

【Windows编程】系列第八篇:创建通用对话框

Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单、工具栏、状态栏以及各个控件。当然除了这些单独的...

33414
来自专栏葡萄城控件技术团队

如何在 ASP.NET MVC 中集成 AngularJS(2)

在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩、应用程序版本自动刷新和工程构建等内容。 下...

23910

扫码关注云+社区