你被錯誤地看這個問題。當您使用小數鍵盤設置文本字段時,小鍵盤將根據用戶的區域設置顯示句點或逗號。這是你想要的。有些用戶會希望像3.14
輸入十進制數,而其他用戶將要進入他們的3,14
。
運行設置應用程序和去一般,那麼國際。看看區域格式設置。這決定了用戶的區域設置以及是否使用了句點或逗號。您的設備和模擬器必須使用不同的區域格式設置進行設置。
下面是最後一部分 - 一旦用戶輸入十進制值,您必須使用NSNumberFormatter
將輸入到文本字段的字符串正確轉換爲NSNumber
。 NSNumberFormatter
將根據用戶的語言環境正確處理數字中的逗號或句點。此外,當您需要向用戶顯示號碼時,請使用NSNumberFormatter
將號碼轉換爲字符串。這將確保號碼以用戶期望的格式顯示給用戶。
不要在用戶輸入值的過程中用句點替換逗號。它會混淆用戶。
更新
一件事,你可以在shouldChangeCharactersInRange
委託方法做的是隻要確定所輸入的所有字符都是有效的字符數。我不會做像檢查兩個小數點分隔符字符的事情。只要讓用戶鍵入數字相關的字符。
當用戶試圖離開文本字段時,您會進行最終驗證。例如:
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *val = [formatter numberFromString:textField.text];
return val != nil; // don't let the user leave if text is not a valid number
}
這是一種可怕的用戶體驗。請爲了您的客戶,看看我的答案。 – rmaddy 2013-02-16 18:31:27