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

来源:互联网 发布:淘宝店铺折扣价设置 编辑:程序博客网 时间:2024/05/18 02:23

今天做一个功能,一开始将某按钮置灰,然后倒计时60秒。每秒钟都刷新按钮的文字,倒计时结束后,使按钮可用。很快就做好了,不过发现一个问题,就是按钮会闪烁,跟星星似的。我的代码是:

 _countDown = 60;    UIColor *color = self.canSend ? [UIColor colorWithRed:40.0/255.0 green:90.0/255.0f blue:190.0/255.0f alpha:1.0f] : [UIColor grayColor];    self.smsButton = [UIButton createButtonWithStyle:UIButtonTypeRoundedRect                                              withFrame:CGRectMake(80, 0, 100, 30)                                              withTitle:NSLocalizedString(@"重发验证码", nil)                                         withTitleColor:color                                     withBackgroudColor:nil                                        withNormalImage:nil                                   withHighlightedImage:nil                               withNormalBackgroudImage:nil                         withHighlightedBackgroundImage:nil                                              withTarge:self                                             withAction:@selector(startTimer:)                                           actionHandle:^(UIButton *sender) {                                                                                          }];

- (void)startTimer {    [self.smsButton setEnabled:NO];    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];}- (void)onTimer {    if (_countDown > 0) {        [self.smsButton setTitle:[NSString stringWithFormat:@"%d秒重新获取", _countDown] forState:UIControlStateDisabled];        _countDown--;    } else {        _countDown = 60;        [_timer invalidate];        _timer = nil;        [self.smsButton setTitle:@"60秒重新获取" forState:UIControlStateDisabled];        [self.smsButton setTitle:@"重发验证码" forState:UIControlStateNormal];        [self.smsButton setEnabled:YES];    }}


解决方法:

将UIButton的类型由system改为custom就OK










1 0