2016-08-09 2 views
0

4 개의 텍스트 필드와 버튼 UPDATE를 포함하는 사용자 정의 셀이있는 tableview가 있습니다. 나는 테이블 뷰에서 웹 서비스로부터 오는 데이터를 보여준다. 텍스트 필드 중 하나가 비어 있으면 UPDATE 버튼을 숨겨야합니다.ReactiveCocoa를 사용하여 유효성 검사보기

모델은 내가 뭔가를 작동

- (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]; 
    }]; 

} 

로 TableViewController 재산 "이름"에 RACSignal을 만들려고 한

@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 

다음 속성은 각 셀의 4 텍스트 필드에 매핑 할 수있다 하나의 속성 "name"을 가진 괜찮 으면, ClaimRequestModel의 모든 속성을 관찰하고 싶습니다.

각 속성에 대해 다중 신호 배열을 만들어야합니까? 그렇다면 모델에 15 개 이상의 속성이있는 경우 어떻게해야합니까?

ReactiveCocoa를 사용하는 것이 가장 좋습니다.

+0

"savedClaims"는 개체 r8의 배열입니까? –

+0

내 대답을 확인하고 그 대답이 작동하는지 아닌지 응답 해 주시겠습니까? –

+0

나는 이미 당신을 업 그레 이드했습니다, 고마워요 @ EktaMakadiya – satyanarayana

답변

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; 
} 

희망이 도움이 될 것입니다.

+0

감사합니다. 모델을 savedClaim에서 삭제할 수 있으므로 cellFroRowAtIndexPath는 해당 모델에 대해 실행되지 않으므로 삭제 된 모델의 바인딩을 해제 할 수 있습니까? – satyanarayana

+0

@satyanarayana 나는 당신을 못 보내고있다. tableview r8에서 삭제 된 항목을 제거 하시겠습니까? –

+0

savedClaims에 2 개의 모델이 있다고 가정하면 2 개의 셀을 볼 수 있습니다. 나중에 2 cell.name이 비어 있으면 model.name은 비워져 updateButton이 활성화되지 않습니다. 이제 2 셀을 제거하면 savedClaims에서 모델이 제거되지만 1 셀에는 유효한 데이터가 있지만 udpateButton은 활성화되지 않고 활성화되지 않습니다. 그렇다면 RAC에서 객체를 바인딩 해제 할 수있는 방법이 있습니까? – satyanarayana

관련 문제