2014-01-12 36 views
0

我想限制UITextField中的用戶輸入爲1-105。我已經設置了委託並通過以下代碼成功限制了字符的實際數量,這些代碼在Stackoverflow的其他地方找到。有什麼我可以添加,以強制用戶輸入1到105之間的任何整數?將UITextField中的用戶輸入限制在一定範圍的數字(不是字符數)

#define MAXLENGTH 2 

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

    NSUInteger oldLength = [_startLevel.text length]; 
    NSUInteger replacementLength = [string length]; 
    NSUInteger rangeLength = range.length; 

    NSUInteger newLength = oldLength - rangeLength + replacementLength; 

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound; 

    return newLength <= MAXLENGTH || returnKey; 
} 

我正在使用數字鍵盤,所以用戶已經限制輸入數字。我只需要找到能夠讓他們輸入範圍內的東西的東西。

在此先感謝。

回答

1

首先將字符串轉換爲數字。爲了便於使用和缺乏控制,您的做法是:-[NSString integerValue]*,NSNumberFormatterNSScanner。格式化程序會給你一個NSNumber從中你可以得到integerValue*;另外兩個可以直接獲取原始數據。

一旦你有了,比較數字和你的範圍的端點,創建一個布爾值。將該布爾值與另外兩個布爾值相結合 - 爲了長度和缺少換行符 - 您已經擁有了,並返回結果。


*對於浮點,無論floatValuedoubleValue

0

在didEndEditing中,獲取文本,將其轉換爲整數,然後檢查值。如果超出範圍,則顯示錯誤消息。假設它開始在範圍內,您也可以將文本重置爲之前的值。

我用正則表達式來驗證正確格式的輸入。我發現了一些關於RegEx的文檔,我可以用它來構建我的表達式。您可以創建一個正則表達式,要求輸入爲1,2或3位數字。我不是專家,但字符串@「^ [0-9] {1,3} $」應該在0到9之間需要1到3個數字(0-9定義合法字符,{1,3 }表示用戶可以輸入1到3,^開始時將表達式錨定到字符串的開頭,並且末尾的「$」將表達式錨定到字符串的末尾)。

+0

@Josh代碼,表示同意。我建議使用正則表達式來驗證格式,並且在通過格式測試後對轉換後的值進行顯式範圍檢查。 –

+0

啊,呃;我不太明白。 –

-1

您可以使用以下

NSString *numberRegex = @"[1-9]||[0-9][1-9]||[0-1]0[0-5]"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegex]; 
    BOOL b = [emailTest evaluateWithObject:numberField.text]; 

    if (b) 
    { 
     //Code when number is in the range 1-105 
    } 
    else 
    { 
     //Code when number is not in the range 1-105 
    } 

希望這有助於你

相關問題