用NSTimer定时刷新按钮的文字,避免按钮闪烁的办法

今天做一个功能,一开始将某按钮置灰,然后倒计时60秒。每秒钟都刷新按钮的文字,倒计时结束后,使按钮可用

很快就做好了,不过发现一个问题,就是按钮会闪烁,跟星星似的。我的代码是:

NSString *text = [NSString stringWithFormat:@"(%d)重发验证码", countDown];
[resendButton setTitle:text forState:UIControlStateDisabled];

在网上搜索了一番,说是用NSTimer刷新按钮文字就是会有这个现象

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

self.resendCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.resendCodeButton.frame = CGRectMake(280, 280, 150, 50);
self.resendCodeButton.enabled = NO;// 默认不可用
[self.resendCodeButton addTarget:self.controller action:@selector(resendCodeButtonPressed) forControlEvents:UIControlEventTouchUpInside];
        
self.resendCodeLabel = [[UILabel alloc] initWithFrame:CGRectMake(280, 280, 150, 50)];
self.resendCodeLabel.textAlignment = NSTextAlignmentCenter;

上面的代码,Label的frame和Button完全一样,后添加到view中,这样就完全盖在Button上面

NSString *buttonTitle = [NSString stringWithFormat:@"(%d)重发验证码",resendCountdown];
resendLabel.text = buttonTitle;

总之,思路就是在Button上罩一个Label,原来对Button样式的操作,都可以改为操作Label

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值