2011-12-26 43 views
1

我目前限制用戶寫入超過4個字符的文本。shouldChangeCharactersInRange:方法不允許刪除現有的字符

對於這個我使用這段代碼

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

    if ([textField.text length] == 4) 
     return NO; 
    else 
     return YES;  
} 

它的做工精細,它不允許用戶編寫4個以上的字符。

但是,當我嘗試刪除現有的字符。鍵盤刪除選項不起作用。

如何解決這個問題

回答

7

當shouldChangeCharactersInRange方法被調用文本字段仍具有舊值,因此如果它的長度是4你就完蛋了。更好地驗證輸入的方式將是計算你要什麼字符串都在一個領域的變化後,檢查它是否有效:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string{ 
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range 
                 withString:string]; 
    return [newString length] <= 4; 
} 
+0

謝謝...好的解決方案。 – 2015-06-05 07:05:36

0

寫像下面將工作

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