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