验证码计时 -- UIButton setTitle 闪烁问题解决方案
首先,有各种版本
方法一:
我运用的一种极其简单的版本: 将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 闪烁问题解决方案的更多相关文章
- winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案
转自原文winform 实现局部更新(如ajax实现)而整个界面不产生闪烁的解决方案 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET ...
- C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone
C# Json反序列化 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...
- iOS改动UIButton setTitle字体颜色和调整字体位置
调整Title字体位置 [button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0, 0, 0)]; 四个參数分别代表:上边界,左边界.下边界,右边界 改动UI ...
- 小程序输入框闪烁BUG解决方案
前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...
- iOS开发之--获取验证码倒计时及闪烁问题解决方案
大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来.. -(void)startTime{ __block ; //倒计时时间 dispatch_queue_t q ...
- iOS项目中获取验证码倒计时及闪烁问题解决方案
-(void)startTime{ __block int timeout= 59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queu ...
- UIButton设置了UIControlStateSelected和UIControlStateHighlighted状态的图片点击会闪烁的解决方案
[btn setBackgroundImage:img1 forState:UIControlStateSelected|UIControlStateHighlighted]; [btn setIma ...
- iOS UIButton setTitle与setAttributedTitle
今天遇到一个问题,查了好久,终于解决. 我需要根据不同的条件给uibutton赋不同的值,由于字体要求有不同颜色变化,所以我选择了一个条件下用setTitle,另一个条件下用setAttributed ...
- 【知识分享】UIButton setTitle 设置为空 失效
今天开发练习超级猜图,但是碰到了一个奇怪的问题 困扰我一个晚上,低效的夜晚 可恨~ 示例说明1 [button setTitle:@"" forState:UIControlSta ...
随机推荐
- Python 3语法小记(五)字符串
Python 3 的源码的默认编码方式为 UTF-8 在Python 3,所有的字符串都是使用Unicode编码的字符序列. utf-8 是一种将字符编码成字节序列的方式.字节即字节,并非字符.字符在 ...
- hive 不同用户 权限设置 出错处理
今天安装了hive 在a账号安装的,一切正常 但是到其他账户下,报错 >show tables; Error in metadata: java.lang.RuntimeException: U ...
- eclipse调试java调用matlab程序的7.17dll找不到的问题
经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...
- $.each()方法,其实挺不错的
例子为主 html主要代码 <div class="fl search">厂商:<select id="firms"><optio ...
- Web 请求响应原理(转)
用Java实现Web服务器 减小字体 增大字体 摘要:WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,H ...
- gRPC helloworld service, RESTful JSON API gateway and swagger UI
概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...
- jquery开头
jQuery(function(){});jQuery().ready(function(){}); 绑定点击事件: jQuery('#temp').click(function() {}); $(d ...
- [Bzoj]1012最大数maxnumber
题目如上(线段树???),蒟蒻第二眼想法(其实这道题正解是单队的说,但蒟蒻刚学线段树,于是...就) 献上黑历史: RE是因为蒟蒻数组开太小:第一次开110000:第二次开200000:结果就………… ...
- 启用div作为编辑器 添加contentEditalbe属性
1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...
- ListView的局部刷新
有的列表可能notifyDataSetChanged()代价有点高,最好能局部刷新. 局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可. private void upda ...