RAC | RactiveCocoa/ReactiveObjC 简单使用

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

  • 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];
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容