要限制一個UITextField/UITextView的輸入字數(shù),首先想到的應(yīng)該是通過UITextFieldDelegate/UITextViewDelegate
的代理方法來限制,那么如何來更好的限制輸入字數(shù)呢,下面我們來看看:
TextView。幸運的是,當(dāng)我們點進去UITextView.h頭文件里時,會發(fā)現(xiàn)- (void)textViewDidChange:(UITextView *)textView;這個代理方法,我們只需要在這個方法里實現(xiàn)字數(shù)限制就好
- (void)textViewDidChange:(UITextField *)textView
{
if (textView == self.textView) {
if (textView.text.length > 20) {
textView.text = [textView.text substringToIndex:20];
}
}
}
TextField。Textfield就沒有那么幸運了,當(dāng)我們點進去UITextField.h頭文件的時候,怎么也找不到- (void)textFieldDidChange:(UITextField *)textField方法,就在我們尋覓上述回調(diào)方法而不得時,可能會發(fā)現(xiàn)最下面有這么個消息通知名稱:
UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;
不過,監(jiān)聽消息還要記得解除監(jiān)聽,通常我還習(xí)慣把監(jiān)聽消息的代碼統(tǒng)一放在一個方法中,看起來有點“大動干戈”。
所幸的是UITextField本身提供了相應(yīng)的事件監(jiān)聽:
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
這樣就可以更好地限制輸入長度:
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField == self.titleField) {
if (textField.text.length > 20) {
textField.text = [textField.text substringToIndex:20];
}
}
}