首先,有各种版本

方法一:

我运用的一种极其简单的版本:  将UIButton的Type 设成 Custom 就不会有闪烁的问题重现

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #35568a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #c35900 }
span.s4 { color: #cf8724 }
span.s5 { font: 14.0px "PingFang SC"; color: #cf8724 }

@property (strong, nonatomic) IBOutlet UIButton *getCodeBtn;

@property (nonatomic, strong) NSTimer *timerCode; //验证码定时器

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
span.s1 { }
span.s2 { color: #35568a }

__block  int leftTime;

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #587ea8 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px }
span.s1 { }
span.s2 { color: #35568a }
span.s3 { color: #000000 }
span.s4 { color: #587ea8 }

- (void)dealloc {

if ([_timerCode isValid]) {

[_timerCode invalidate];

_timerCode = nil;

}

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #777997 }
span.s1 { }

#pragma mark - 验证码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #cf8724 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #cf8724 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #587ea8 }
span.s1 { font: 14.0px Menlo }
span.s2 { }
span.s3 { color: #35568a }
span.s4 { color: #c35900 }
span.s5 { font: 14.0px Menlo; color: #000000 }
span.s6 { color: #000000 }
span.s7 { color: #587ea8 }
span.s8 { font: 14.0px "PingFang SC" }
span.s9 { color: #777997 }

//重新发送验证码

- (IBAction)resendCodeBtnPressed:(UIButton *)sender {

//判断哪一个网络请求发送验证码

//...

sender.enabled = NO;

leftTime = 60;

[self startOneTimer];

//发送验证码请求

[self.viewModel requestWithSendCode:[kUSERDEFAULT objectForKey:_isResetPassword? kForgetMobile:kLoginMobile] block:^(BOOL flag) {

}];

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #cf8724 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #cf8724 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #587ea8 }
span.s1 { }
span.s2 { font: 14.0px Menlo }
span.s3 { color: #35568a }
span.s4 { color: #000000 }
span.s5 { color: #587ea8 }
span.s6 { color: #c35900 }
span.s7 { color: #e82300 }
span.s8 { font: 14.0px "PingFang SC"; color: #e82300 }
span.s9 { color: #777997 }
span.s10 { color: #cf8724 }
span.s11 { font: 14.0px "PingFang SC"; color: #cf8724 }

/**

*  发送验证码之后等待若干时间

*/

- (void)startOneTimer {

_getCodeBtn.enabled = NO;

leftTime = 60;

_timerCode = [NSTimer  scheduledTimerWithTimeInterval:1 block:^{

if (leftTime == 0) {

_getCodeBtn.enabled = YES;

[_getCodeBtn setTitle:@"重新发送" forState:UIControlStateNormal];

[_getCodeBtn setTitleColor:fcc639 forState:UIControlStateNormal];

//计时完成,销毁定时器

[_timerCode invalidate];

_timerCode = nil;

leftTime = 60;

return ;

}

leftTime--;

[_getCodeBtn setTitle:[NSString stringWithFormat:@"%i秒后重发", leftTime] forState:UIControlStateNormal];

[_getCodeBtn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];

} repeats:YES];

}

方法二: 就是在UIButton上罩一个同样大小的UILabel,然后每次刷新UILabel的文字,不刷新按钮,效果不错,不再闪烁了

链接 :http://blog.csdn.net/kyfxbl/article/details/17619221

方法三:https://www.cnblogs.com/manji/p/4813520.html

补充: 我的方法中运用了 防止timer没有被销毁掉的timerBlocks 请自行查找

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #cf8724 }
span.s1 { }

//  NSTimer+Blocks.h

//

//  Created by Jiva DeVoe on 1/14/11.

//  Copyright 2011 Random Ideas, LLC. All rights reserved.

验证码计时 -- UIButton setTitle 闪烁问题解决方案的更多相关文章

  1. winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案

    转自原文winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET ...

  2. C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone

    C# Json反序列化   Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...

  3. iOS改动UIButton setTitle字体颜色和调整字体位置

    调整Title字体位置 [button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0, 0, 0)]; 四个參数分别代表:上边界,左边界.下边界,右边界 改动UI ...

  4. 小程序输入框闪烁BUG解决方案

    前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...

  5. iOS开发之--获取验证码倒计时及闪烁问题解决方案

    大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来.. -(void)startTime{ __block ; //倒计时时间 dispatch_queue_t q ...

  6. iOS项目中获取验证码倒计时及闪烁问题解决方案

    -(void)startTime{ __block int timeout= 59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queu ...

  7. UIButton设置了UIControlStateSelected和UIControlStateHighlighted状态的图片点击会闪烁的解决方案

    [btn setBackgroundImage:img1 forState:UIControlStateSelected|UIControlStateHighlighted]; [btn setIma ...

  8. iOS UIButton setTitle与setAttributedTitle

    今天遇到一个问题,查了好久,终于解决. 我需要根据不同的条件给uibutton赋不同的值,由于字体要求有不同颜色变化,所以我选择了一个条件下用setTitle,另一个条件下用setAttributed ...

  9. 【知识分享】UIButton setTitle 设置为空 失效

    今天开发练习超级猜图,但是碰到了一个奇怪的问题 困扰我一个晚上,低效的夜晚 可恨~ 示例说明1 [button setTitle:@"" forState:UIControlSta ...

随机推荐

  1. Python 3语法小记(五)字符串

    Python 3 的源码的默认编码方式为 UTF-8 在Python 3,所有的字符串都是使用Unicode编码的字符序列. utf-8 是一种将字符编码成字节序列的方式.字节即字节,并非字符.字符在 ...

  2. hive 不同用户 权限设置 出错处理

    今天安装了hive 在a账号安装的,一切正常 但是到其他账户下,报错 >show tables; Error in metadata: java.lang.RuntimeException: U ...

  3. eclipse调试java调用matlab程序的7.17dll找不到的问题

    经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...

  4. $.each()方法,其实挺不错的

    例子为主 html主要代码 <div class="fl search">厂商:<select id="firms"><optio ...

  5. Web 请求响应原理(转)

    用Java实现Web服务器 减小字体 增大字体 摘要:WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,H ...

  6. gRPC helloworld service, RESTful JSON API gateway and swagger UI

    概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...

  7. jquery开头

    jQuery(function(){});jQuery().ready(function(){}); 绑定点击事件: jQuery('#temp').click(function() {}); $(d ...

  8. [Bzoj]1012最大数maxnumber

    题目如上(线段树???),蒟蒻第二眼想法(其实这道题正解是单队的说,但蒟蒻刚学线段树,于是...就) 献上黑历史: RE是因为蒟蒻数组开太小:第一次开110000:第二次开200000:结果就………… ...

  9. 启用div作为编辑器 添加contentEditalbe属性

    1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...

  10. ListView的局部刷新

    有的列表可能notifyDataSetChanged()代价有点高,最好能局部刷新. 局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可. private void upda ...