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 条评论
登录 后参与评论

相关文章

来自专栏蓝天

C/C++编程可用的Linux自带工具

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Soluti...

1092
来自专栏张戈的专栏

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守 robots 规则对服务器造成压力,还不能为网站带来流...

4255
来自专栏大魏分享(微信公众号:david-share)

从三个源码文件,深入理解微服务的安全实现! | 微服务系列第十二篇.精选

在微服务架构中实现可靠且强大的安全实现非常重要。微服务的体系结构向应用程序公开了多个入口点,并且通信可能需要多个网络跃点,因此未授权访问的风险很高。这需要比传统...

953
来自专栏FreeBuf

对利用Adobe 0day – CVE-2014-0502进行攻击的行为分析

前些天FireEye发布了一个利用AdobeFlash的新0day进行攻击的报告,且Adobe已经根据漏洞情况发布了一个安全更新。 根据FireEye的报告,许...

1908
来自专栏点滴积累

Fish Shell

今天看到阮一峰同学的一篇博客(Fish shell 入门教程),讲述的非常详细、清楚,有兴趣的可以直接转去查看此文,本文仅提供一下个人使用心得。 一、fish ...

3256
来自专栏玄魂工作室

Struts2 S2-052 RCE简单测试

本文由玄魂和 方块K 合写。 ---- 不太愿意跟风写类似的文章,网友“方块K” 投了一篇相关文章过来,但是略显简略,我重新进行了扩展。 参考了网上的相关文章,...

3106
来自专栏向治洪

TraceView性能分析工具介绍

一、TraceView简介       TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行...

1825
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (4)

上一篇讲了使用OpenId Connect进行Authentication. 下面讲 Hybrid Flow和Offline Access 目前我们解决方案里面...

4755
来自专栏SDNLAB

OpenDaylight Lithium版本简单应用及流表操作指南

OpenDaylight(以下简写为ODL)的Lithium(锂)版本的最新版Lithium-SR2已经与2015年10月8日发布,具体详情可参考ODL官网。L...

3838
来自专栏小鹏的专栏

在mac上安装Xgboost Python库

最近在mac上用到xgboost库,安装时遇到颇多大坑,网上查了很多答案几乎都是win上的问题,没遇到理想的,自己也就摸着石头把几个大坑给填了,总结一下,给后...

21610

扫码关注云+社区