Tag: reactive cocoa

带有ReactiveCocoa的MVVM:限制视图模型中的UITextField的文本长度

我正在采用MVVM与ReactiveCocoa。 现在我有一个UITextField,我需要限制它的最大文本长度为100。 在我看来: – (void)bindViewModel { RAC(self.viewModel, text) = self.textField.rac_textSignal; [RACObserve(self.viewModel, text) subscribeNext:(NSString *text) { self.textField.text = text; }]; } 在我看来的模型 – (id)init { [RACObserve(self, text) subscribeNext:^(NSString *x) { //block 1 if (x.length > maxTextLength) { x = [x substringToIndex:maxTextLength]; } }]; } 但是这不行, block 1从来不叫。 通过使用MVVM,我相信文本长度控制逻辑应该放在我的视图模型中,但是实现这一点的正确方法是什么?

UITextField获取焦点,然后由于在textFieldShouldReturn中返回YES而立即失去焦点

这是我的代码: – (void)viewDidLoad { [super viewDidLoad]; // passwordTextField cannot get focus after click next key due to this RAC RAC(self.loginButton, enabled) = [RACSignal combineLatest:@[self.userTextField.rac_textSignal, self.passwordTextField.rac_textSignal] reduce:^id (NSString *user, NSString *password) { if ([user length] > 0 && [password length] > 0) { return @YES; } return @NO; }]; } – (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField […]

Reactive Cocoa – 当以编程方式设置文本时,UITextView的rac_textSignal不会被调用

我正在实现一个聊天界面,并且使用Reactive Cocoa来根据用户的types来调整聊天泡泡的大小。 目前,我正在基于textview的rac_textSignal更新UI的布局。 一切都很好 – 除了一点:当用户发送消息,我编程清除文本字段: _inputTextView.text = @""; …但textview的rac_textSignal不激活。 我听说这是ReactiveCocoa的一个特性 – 但是build立这个的正确方法是什么? 我需要有一个NSString持有的currentTypedString,并驱动UI更改时,该string更新?

reactivecocoa true shouldChangeCharactersInRange文本字段等效

我从reactiveCocoa开始,我在UITextfield有一些麻烦。 我尝试对textField进行基本检查,只显示4位数字。 我尝试遵循这个例子: http ://nshipster.com/reactivecocoa/但在这里,shouldChangeCharactersInRange总是为true,所以文本字段总是更新。 我试过2个解决scheme: [RACSignal combineLatest:@[self.pinDigitField.rac_textSignal] reduce:^(NSString *pinDigit) { NSCharacterSet *numbersOnly =[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:pinDigit]; return @([numbersOnly isSupersetOfSet:characterSetFromTextField] && text.length < 5); }]; 和这个 [[self.pinDigitField.rac_textSignal filter:^BOOL(id value) { NSString *text = value; NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:text]; BOOL stringIsValid = [numbersOnly isSupersetOfSet:characterSetFromTextField] && text.length < […]

使用ReactiveCocoa重试asynchronous操作

我正在使用ReactiveCocoa信号来表示对我们系统中RESTful后端的调用。 每个RESTful调用都应该接收一个令牌作为参数之一。 令牌本身是从authenticationAPI调用接收的。 所有工作正常,我们现在引入令牌过期,所以后端访问类可能需要重新授权本身,如果API调用失败,HTTP代码403。我想使这个操作对调用者完全透明,这是我最好的与: – (RACSignal *)apiCallWithSession:(Session *)session base:(NSString *)base params:(NSDictionary *)params get:(BOOL)get { NSMutableDictionary* p = [params mutableCopy]; p[@"token"] = session.token; RACSubject *subject = [RACReplaySubject subject]; RACSignal *first = [self apiCall:base params:p get:get]; // this returns the signal representing the asynchronous HTTP operation @weakify(self); [first subscribeNext:^(id x) { [subject sendNext:x]; // if it works, […]