2011-09-10 4 views

답변

4
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 

NSNumber* candidateNumber; 

NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

range = NSMakeRange(0, [candidateString length]); 

[numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil]; 

if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) { 

    return NO; 
} 
else { 
    return YES; } } 
5

는 사용자가 하나의 점을 입력 할 수 있도록하려는 경우에는 대리자 메서드를

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

을 사용할 수 있습니다 그리고 텍스트 필드가 이미 점을 포함하는 경우 단순히 확인합니다.

1

다음 코드를 사용합니다. 나를 위해 완벽하게 작동하며 코드가 적습니다.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
    NSString *decimalSymbol = [numberFormatter decimalSeparator]; 

    if(([textField.text rangeOfString:decimalSymbol].location != NSNotFound) && 
     ([string rangeOfString:decimalSymbol].location != NSNotFound)) { 
     return NO; 
    } 
return YES; 
} 
관련 문제