iOS開發若何更好的限制UITextField的輸入長度?

weixin_34249678發表於2018-03-25

前言

實際專案開發中我們會在很多時候遇到輸入框要限制字數的情況(如果你登陸註冊的時候可能密碼使用者名稱要限制幾位,或者你在評論一個帖子的時候要限制你評論的字數等等),那麼接下來就讓我們一起看看到底要怎樣處理才能更好的實現對輸入長度的控制。

一般同學在看到這個需求的時候首先想到的是使用 UITextFieldDelegate的代理方法就直接控制就可以:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text

例如:我們具體需求要限制輸入長度為10,那麼就會:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (textField == MyTextField) {
        if (textField.text.length > 10) {
            return NO;
        }
    }
    return YES;
}

缺點是:比如說要求控制10個字,當輸入到第9個的時候,一下打拼音打出來好幾個字,或者點選聯想詞出來好幾個字的話,那麼輸入框裡面的字數就大於10個了。那麼應該怎麼處理呢?

UITextField有UITextFieldTextDidChangeNotification這個訊息通知(注意:監聽訊息還要記得解除監聽)使用方法:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField{
    if (textField == self.titleField) {
        if (textField.text.length > 10) {
            textField.text = [textField.text substringToIndex:10];
        }
    }
}

相關文章