实现一个简单的验证码获取倒计时的功能
- UIButton
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *racBtn;
@end
- 私有变量
@implementation ViewController
{
int _timeInterval;
RACDisposable *_schedulerDisposable;
}
- 按钮事件监听和处理
- (void)viewDidLoad {
[super viewDidLoad];
// scheduler
@weakify(self);
[[_racBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
@strongify(self);
self->_timeInterval = 10;
[self fireVercodeScheduler];
}];
}
- 开启定时器
-(void)fireVercodeScheduler{
@weakify(self);
_schedulerDisposable = [[RACSignal interval:1 onScheduler:RACScheduler.mainThreadScheduler] subscribeNext:^(NSDate * _Nullable x) {
NSLog(@"%@",x);
@strongify(self);
self->_timeInterval -= 1;
self.racBtn.enabled = self->_timeInterval == 0;
NSString *title = self.racBtn.enabled ? @"获取验证码" : [NSString stringWithFormat:@"%ds 后重新获取验证码", self->_timeInterval];
[self setButtonTitle:title];
if (self.racBtn.enabled) {
[self->_schedulerDisposable dispose];
}
}];
}
- 设置按钮title
-(void)setButtonTitle: (NSString*)title{
_racBtn.titleLabel.text = title;
[_racBtn setTitle:title forState:UIControlStateNormal];
[_racBtn sizeToFit];
}
- 移除定时器dealloc时
-(void)dealloc{
NSLog(@"%s", __func__);
[_schedulerDisposable dispose];
}
网友评论