需求:用户输入账号(长度>11)、密码(长度>=6),否则“登录”按钮置为半透明(alpha属性, CGFloat型)且不可点击(enable属性, BOOL型)
这个用户体验需求看似非常繁琐,传统思路使用UITextFieldDelegate确实很费神
但是,RAC宏方法即可轻松实现:
RAC(button对象, button属性)
@property (nonatomic) UITextField *accountField;//账号输入框
@property (nonatomic) UITextField *passwordField;//密码输入框
@property (nonatomic) UIButton *loginBtn;//登录按钮
在对应视图控制器viewDidLoad方法中实现下列方法:
NSInteger x = 11;//账号限制长度
NSInteger y = 6;//密码限制长度
//UIButton.enable
RAC(_loginBtn, enabled) = [RACSignal combineLatest:@[_accountField.rac_textSignal, _passwordField.rac_textSignal] reduce:^id(NSString *account, NSString *password){
return @(account.length > x && password.length >= y);
}];
//UIButton.alpha
RAC(_loginBtn, alpha) = [RACSignal combineLatest:@[_accountField.rac_textSignal, _passwordField.rac_textSignal] reduce:^id(NSString *account, NSString *password){
return (account.length > x && password.length >= y) ? @(1.0f):@(0.5f);
}];
效果展示:
show.gif
其实ReactiveCocoa可以轻松实现的类似功能远不止这些,例如:先检查当前用户输入的账号是否已注册,再进行登录;限制UITextField输入的字符串长度、内容等
如果该内容对你所有帮助,就请点个喜欢哈
网友评论