使用ReactiveCocoa查看验证

时间:2016-08-09 13:57:46

标签: ios validation tableview reactive-cocoa

我有一个自定义单元格的tableview,其中包含4个文本字段和一个按钮UPDATE。我在tableview中显示来自Web服务的数据。当任何一个文本字段为空时,应隐藏UPDATE按钮。

MODEL具有以下属性,可与每个单元格中的4个文本字段进行映射

@interface ClaimRequestModel : JSONModel 

@property (strong, atomic) NSString <Optional> *id;
@property (strong, atomic) NSString <Optional> *trip_id;
@property (strong, atomic) NSString <Optional> *item;
@property (strong, atomic) NSString <Optional> *name;
@property (strong, nonatomic) NSString <Optional> *description;
@end

我试图在属性&#34; name&#34;上创建RACSignal。在TableViewController中作为

- (void)viewDidLoad {
   [savedClaims enumerateObjectsUsingBlock:^(ClaimRequestModel *claim, NSUInteger idx, BOOL * _Nonnull stop) {
            [claimSignals addObject:RACObserve(claim, name)];
    }];
     enableCostSignal = [RACSignal combineLatest:costSignals];
    [self setupClaimTypeSignal:[RACSignal combineLatest:claimSignals]];
//        [self.tableView reloadData];

}
-(void)setupClaimTypeSignal:(RACSignal*) signal {
    [[signal map:^id(RACTuple *values) {
        for (NSString *string in values) {
            if ([string isEmpty]) {
                return @(NO);
            }
        }
        return @(YES);
    }] subscribeNext:^(id x) {
        self.validInput = [x boolValue];
    }];

}

它适用于一个属性&#34; name&#34;我想观察ClaimRequestModel中的所有属性。

我是否需要为每个属性创建多个信号数组?如果是这样,如果模型有超过15个属性怎么办?

任何人都可以帮助我使用ReactiveCocoa进行最佳实践吗?

1 个答案:

答案 0 :(得分:1)

您可能需要在cellForRowAtIndexPath中添加信号以检查状况。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   ClaimRequestCell *cell = [[[UINib nibWithNibName:@"ClaimRequestCell" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];

   cell = [tableView dequeueReusableCellWithIdentifier:cell.reuseIdentifier];

   ClaimRequestModel *claim = [savedClaims objectAtIndex:indexPath.row];

   RACSignal *valid = [RACSignal
                    combineLatest:@[[RACObserve(claim, name) ignore:nil], [RACObserve(claim, item) ignore:nil],[RACObserve(claim, trip_id) ignore:nil] ]
                    reduce:^(NSString *name, NSString *item, NSString *trip_id ) {
                        return @([name length] == 0 && [item length] == 0 && [trip_id length] == 0);
                    }];

   RAC(cell.updateButton, enabled) = valid;

   return cell;
}

希望这会对你有所帮助。