2011-09-10 27 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; 
}