2014-01-22 36 views
0

我有一個UITextField,我想有一個30個字符的限制。我做了這樣:允許刪除的UITextField中的最大字符數?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
                 replacementString:(NSString *)string 
{ 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 30) ? NO : YES; 
} 

目前,如果我輸入兩個重複的條目到這些文本字段填寫的表格,我們的服務器追加_1234到年底,4張隨機數,以防止重名。因此,例如,如果我再次輸入abc,然後abc,則第二個將被命名爲abc_8252

如果我輸入兩個重複的30個字符的名稱,_9392仍然附加,輸入35個字符,並且上面的代碼崩潰,因爲replacementString將永遠不會將它降低到30個字符以下。

我想要做的是,如果字符串是> 30字符,只允許使用backspace鍵,以便它們可以將它重新放下,但不能再使用它,並且一旦它下降到低於30,將無法再回到上面。我可以這樣做嗎?

回答

1

固定的,就像這樣:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
                 replacementString:(NSString *)string 
{ 
    // Allow a backspace always, in case we went over 30 due to the _1234 appending. 
    const char *_char = [string cStringUsingEncoding:NSUTF8StringEncoding]; 
    int isBackSpace = strcmp(_char, "\b"); 
    if (isBackSpace == -8) { 
     return YES; 
    } 

    // If it's not a backspace, allow it if we're still under 30 chars. 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 30) ? NO : YES; 
} 
相關問題