驗證碼計時 -- UIButton setTitle 閃爍問題解決方案

首先,有各類版本html

 

方法一:網絡

我運用的一種極其簡單的版本:  將UIButton的Type 設成 Custom 就不會有閃爍的問題重現dom

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

@property (nonatomic, strong) NSTimer *timerCode; //驗證碼定時器spa

 

__block  int leftTime;.net

 

- (void)dealloc {orm

    if ([_timerCode isValid]) {htm

        [_timerCode invalidate];blog

        _timerCode = nil;get

    }

    

}

 

#pragma mark - 驗證碼

//從新發送驗證碼

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

    //判斷哪個網絡請求發送驗證碼

    //...

    sender.enabled = NO;

    leftTime = 60;

    [self startOneTimer];

    //發送驗證碼請求

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

     }];

 

}

 

/**

 *  發送驗證碼以後等待若干時間

 */

- (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 請自行查找

//  NSTimer+Blocks.h

//

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

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

相關文章
相關標籤/搜索