美文网首页
RAC | RactiveCocoa/ReactiveObjC

RAC | RactiveCocoa/ReactiveObjC

作者: 清無 | 来源:发表于2018-04-27 16:51 被阅读21次

实现一个简单的验证码获取倒计时的功能

  • 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];
}

相关文章

网友评论

      本文标题:RAC | RactiveCocoa/ReactiveObjC

      本文链接:https://www.haomeiwen.com/subject/xwcilftx.html