2013-02-16 50 views
1

我發現了一個惱人的問題替換字符。我有一個帶數字十進制鍵盤的文本框,但模擬器有點,設備有逗號(都是6.1)。我該怎麼做,如果你插入一個逗號,這是由一個點代替?的iOS中的UITextField

感謝

編輯:

這個過程中,必須在這種方法中,實時

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

否則逗號寫入,並在下一個字符,它被替換

+0

這是一種可怕的用戶體驗。請爲了您的客戶,看看我的答案。 – rmaddy 2013-02-16 18:31:27

回答

4

您可以使用

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
             withString:(NSString *)replacement 

如:

NSString *str = myTextfield.text; 

str = [str stringByReplacingOccurrencesOfString:@"." 
            withString:@","]; 

自定義鍵盤看到這個link

編輯 您可以檢查字符串中的這個功能,如果它的輸入@ 「」然後你可以用@改變它「」

// using something this 


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
     [self updateTextLabelsWithText: newString]; 
     NSLog(@"Changed Str: %@",newString); 

     return YES; 
    } 

    -(void)updateTextLabelsWithText:(NSString *)str 
    { 
    str = [str stringByReplacingOccurrencesOfString:@"." 
              withString:@","]; 
     [myTextFiled setText:str]; 
    } 
+0

對不起,請看這個問題的更改 – Vins 2013-02-16 18:08:02

+0

@Vins查看更新的答案。[另請參閱](http://stackoverflow.com/questions/10363856/iphone-how-to-get-uitextfields-text-while-typing)。 – HDdeveloper 2013-02-16 18:24:38

+3

此代碼不起作用。如果手動更新文本字段的文本,則必須從'shouldChangeCharactersInRange'返回'NO'。如果您希望框架繼續並且使用替換字符串更新文本字段,則只返回「YES」。 – rmaddy 2013-02-16 18:24:58

2

你被錯誤地看這個問題。當您使用小數鍵盤設置文本字段時,小鍵盤將根據用戶的區域設置顯示句點或逗號。這是你想要的。有些用戶會希望像3.14輸入十進制數,而其他用戶將要進入他們的3,14

運行設置應用程序和去一般,那麼國際。看看區域格式設置。這決定了用戶的區域設置以及是否使用了句點或逗號。您的設備和模擬器必須使用不同的區域格式設置進行設置。

下面是最後一部分 - 一旦用戶輸入十進制值,您必須使用NSNumberFormatter將輸入到文本字段的字符串正確轉換爲NSNumberNSNumberFormatter將根據用戶的語言環境正確處理數字中的逗號或句點。此外,當您需要向用戶顯示號碼時,請使用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 
} 
+0

好的,很好,但你能爲我做一個快速的例子嗎?與我的例子有關?謝謝 – Vins 2013-02-16 18:42:21

+0

對不起,是什麼樣的例子?我說你不需要對'shouldChangeCharactersInRange'委託做任何事情。只需讓用戶輸入一個逗號或句點的數字,因爲它顯示在小數鍵盤上。 – rmaddy 2013-02-16 18:45:43

+0

,因爲我確定要放一個點。所以我在'if([textFieldString rangeOfString:@「。」「。location == NSNotFound){//不包含點 return YES; } else {//包含點 if([string isEqualToString:@「。」]){ return NO; } }' – Vins 2013-02-16 18:51:09

1

Swift 3。1

1)更換與點(逗號(,)。)

2)只允許一個點(。)

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let dotsCount = textField.text!.componentsSeparatedByString(".").count - 1 
    if dotsCount > 0 && (string == "." || string == ",") { 
     return false 
    } 

    if string == "," { 
     textField.text! += "." 
     return false 
    } 

    return true 
}