1
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 

    if (string.length == 0) { 
     return YES; 
    } 

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

嗨,使用此代碼我可以只插入十進制值在文本字段中。 小數點分隔符是逗號「,」 如何將其更改爲點「。」 ?NSNumberFormatter更改十進制分隔符樣式

感謝

+0

是不是'[NSNumberFormatter setFormat]'你在做什麼? – trojanfoe

回答

4

有一個叫Localization小東西。每種語言都使用不同的字符作爲小數點分隔符。在英語使用小數點的地方,其他語言使用逗號(或其他字符)。

當您創建NSNumberFormatter時,它使用系統區域設置(NSLocale實例)來決定小數點分隔符(以及分組分隔符和其他內容)。 如果你想有一個固定的行爲,那麼就設置使用[NSNumberFormatter setLocale:]

還要注意有一個特殊的區域 [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]的它定義了一個特殊的區域不能由用戶設置被改變,始終是相同的不同的語言環境。

在這種情況下,使用NSNumberFormatter不是最好的主意。這是您想使用正則表達式的情況之一。

+0

謝謝!現在我使用正則表達式.... –

相關問題