验证码计时 -- 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.

时间: 2024-10-18 08:08:58

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

iOS修改UIButton setTitle字体颜色和调整字体位置

调整Title字体位置 [button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0, 0, 0)]; 四个参数分别代表:上边界,左边界,下边界,右边界 修改UIButton setTitle字体颜色 [button addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside];

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

大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来.. -(void)startTime{ __block int timeout= 59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE

ubuntu 15.04安装显卡驱动,出现登录界面闪烁得解决方案(dell 3420 )

1.按照帖子中的步骤,安装了nvidia-331 nvidia-setting nvidia-prime http://jingyan.baidu.com/article/046a7b3efe8c58f9c27fa98b.html 2. 重启后发现进不了图形登录界面了(屏幕一直在闪,一会儿黑屏,一会儿登陆界面),就连ctrl+alt+f1也收到影响不能正常进入. 只能进入recovery mode了 注意:如果不是这种情况的话,直接ctrl+alt+f1进入终端模式,跳到第6步 3. 重启电脑在

窗口和控件闪烁解决方案

对于MFC程序员来说做UI开发是痛苦的事情,不过大多数情况下我们都需要做这件事情,因为MFC自带的控件实在是太简陋了.这时候我们多半会涉及到自绘控件,随之而来的很可能就是窗口和控件的闪烁问题.这篇文章希望对MFC的窗口和控件闪烁问题做一个尽量全面的总结. 一.闪烁的原因 引起闪烁的原因很多,以至于网上有n多种解决闪烁问题的方法:如果你按照某一种方法做了仍然没有解决你的问题,请不要认定这个方法有问题,而是你没有对上号.如果你对这个解释不满意的话,我们就来深究一下到底是什么引起了闪烁.从原理上讲,闪

android listview异步加载图片错位,重复,闪烁分析以及解决方案

我们在使用listview异步加载图片 的时候,在快速滑动或者网络不好的情况下,会出现图片错位,重复,闪烁等问题,其实这些问题总结起来就是一个问题, 比如listview上有100个item,一屏只显示10个item,我们知道getView()中converView是用来复用view对象的,因为一个item的view对象,而imageview控件就是view通过findViewById()获得的,而我们在复用view对象时,也就是说这个imageview也被复用了,比如第11个item的view

dedecms后台登录验证码不显示错误处理

Dede后台验证码不显示或不正常分三种情况,下面来逐一分析 Dede后台验证码不显示情况一 Dede后台验证码不显示情况二 Dede后台验证码不显示情况三 通用解决方案---取消后台验证码功能 因为没有验证码 不能进后台 所以修改php文件源代码: 方法一: 打开dede/login.php 找到如下代码 if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ Reset

WinForm Flicker闪屏解决方案

开发WinForm 程序时经常会遇到闪屏的问题,这会给用户造成很差的使用体验,所以必须妥善解决好这个问题. 首先,我们先要找出闪屏的原因,就我目前遇到的问题而言,其原因真是五花八门. 主要的原因有:使用了很多的组件导致加载缓慢,使用了性能差的组件(PictureBox.Button等). 所以,不论开发者的水平如何,微软给我们也挖了坑的. 对于控件太多造成的闪屏,其原因有两个: 1. 绘制控件时,Windows 会给控件发送两个消息.第一个是WM_ERASEBKGND消息,它会触发OnPaint

发送短信验证码

//发送短信 $("#btnSendcode").click(function () { var $this = $(this); //检查是否输入手机号码 if ($("#txtMobile").val() == "") { $.dialog.alert("对不起,请先输入手机号码!", function () { $("#txtMobile").focus(); }); return false; }

Dede后台验证码不显示解决方法详解(dedecms 5.7)

今天朋友问我他本地与服务器上安装了dedecms5.7无法显示验证码,一般这种情况很少见,一般情况就是服务器设置问题,还有临时目录的权限问题 Dede后台验证码不显示或不正常分三种情况,下面来逐一分析 Dede后台验证码不显示情况一 Dede后台验证码不显示情况二 Dede后台验证码不显示情况三 通用解决方案---取消后台验证码功能 因为没有验证码 不能进后台 所以修改php文件源代码: 方法一: 打开dede/login.php 找到如下代码 if(($validate=='' || $val