[objective-c]RACSignal 不正在生成时使用 UIButton 重置 UITextField

标签: ios Objective-C
发布时间: 2016/10/2 12:57:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

UITextFieldUIImageViewUIButton 在我 UIView

RACSignal ,打印文本框字段值使用 NSLog 后订阅。此外, UIImageView 作为错误指示器。

代码段如下所示︰

[username.rac_textSignal subscribeNext:^(NSString *value) {
    NSLog(@"-Text field(username) has been updated: %@", value);
}];

RAC(nameIndicator,image) = [username.rac_textSignal map:^id(NSString *value) {
                                NSLog(@"Text field(username) has been updated: %@", value);
                                if([value length]) return [UIImage imageNamed:@"GreenStar"];
                                else return [UIImage imageNamed:@"RedStar"];
                            }];

[[resetButton rac_signalForControlEvents:UIControlEventTouchUpInside]
 subscribeNext:^(id x) {
             [username setText:@""];
 }];

每当我重置使用重置按钮文本字段获取清除但的相应改变字段 nameIndicator 不反映。然而,如果我重置使用 backspace 键字段 nameIndicator 转身从 GreenStar.pngRedStar.png

任何人都可以提出我需要重置沿与 textfield 更正 nameIndicator 图像吗?

解决方法 1:

你得到的信号 -rac_textSignal 只是反映了从 UI,像不编程方式更改更新 -setText:

简单,势在必行的解决方法是只分配 nameIndicator.imageresetButton 的订阅块。

[[resetButton
    rac_signalForControlEvents:UIControlEventTouchUpInside]
    subscribeNext:^(id x) {
        username.text = @"";
        nameIndicator.image = [UIImage imageNamed:@"RedStar"];
    }];

另外,功能更强大的解决方案是创建一个信号,表示这两个直接更改到清除文本字段的文本字段和按钮tap。点击重置按钮,同时也将清除文本字段时,后者的信号将发送空字符串。

RACSignal *resetUsernameSignal = [[[resetButton
    rac_signalForControlEvents:UIControlEventTouchUpInside]
    mapReplace:@""]
    doNext:^(NSString *text) {
        username.text = text;
    }];

RAC(nameIndicator, image) = [[RACSignal
    merge:@[
        username.rac_textSignal,
        resetUsernameSignal
    ]]
    map:^(NSString *text) {
        NSLog(@"Text field(username) has been updated: %@", value);
        if([value length]) return [UIImage imageNamed:@"GreenStar"];
        else return [UIImage imageNamed:@"RedStar"];
    }]
赞助商