2014-12-05 1 views
1

내 문제는 사용자가 범위에 값을 입력 할 수 있습니다처럼 내 범위는 JSON에서오고 ... 할 필요가있다사이에만 값을 허용해야 UITextField에 작업을 수행하는 방법에 범위

여기에 내가 시도간에 ... 여기 내 코드입니다 A, B, 내 시작 범위는 b는 최종 범위 사용자가 나는 그냥 텍스트 필드의 length을 확인하여 간단하게 할 수 있다고 생각하지 범위

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField) 
    { 
    NSData *data = [((MDCFlowDetails *)_flow).flow_data dataUsingEncoding:NSUTF8StringEncoding]; 
    id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
    NSString *a = [json objectForKey:@"startrange"]; 
    NSString *b = [json objectForKey:@"endrange"]; 
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$"; 

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                      options:NSRegularExpressionCaseInsensitive 
                      error:nil]; 
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString 
                 options:0 
                  range:NSMakeRange(0, [newString length])]; 
    if (numberOfMatches == 0) 
     return NO; 
} 

return YES; 
} 
+0

그리고 정확히 "startRange"와 "endRange는"무엇 :

코드 아래를 참조하십시오? 이 단어들이 있습니까? 번호? 커피 기계의 색인? 이러한 변수는 코드에서 사용되지 않습니다. 내가 보는 모든 것은 (나는 이해할 수없는) 정규 표현식이다. 더 많은 정보를 추가해야합니다. –

+0

@MatthiasBauch startRange 및 endRange는 숫자 –

+0

입니다. 따라서 범위는 최대 및 최소 newString 길이입니까? – Mateusz

답변

1

에서 더 나은 범위를 값을 입력 할 수 있습니다.

사용자가 텍스트 필드에 텍스트를 입력 할 때 범위의 상한 및 하한에 조건을 넣습니다.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (textField) 
    { 
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

     NSData *data = [((MDCFlowDetails *)_flow).flow_data dataUsingEncoding:NSUTF8StringEncoding]; 
     id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
     NSInteger a = [[json objectForKey:@"startrange"] integerValue]; 
     NSInteger b = [[json objectForKey:@"endrange"] integerValue]; 

     if (newString.length > a && newString.length > b) { 
      // Check both range are satisfied. 
      return NO; 
     } 

    } 
    return YES; 
} 
+0

뭔가 쓰기 위해 iOS 키보드를 사용하고 'a'가 0보다 크면 0이 작동하지 않습니다.이 줄을 제거해야합니다. if (newString.length Mateusz

+0

@Mateusz 이제 OP의 요구 사항에 따라 달라집니다. 두 가지 조건을 병합 할 수도 있지만 엄격한 범위 유효성 검사가 얼마나 까다 롭지는 않습니다. 어떤 개선이 필요하다고 생각한다면 자유롭게 수정하십시오. – Kampai

+0

@Mateusz 사용자가 범위에서 아래의 문자를 제거하려고하는 동안 유효성 검사를했습니다. 그러나 여전히 당신은 그것이 그 범위 아래에서 제거 할 수 없다는 것을 알 수 있습니다. – Kampai

관련 문제