前言
實(shí)際項(xiàng)目開發(fā)中我們會(huì)在很多時(shí)候遇到輸入框要限制字?jǐn)?shù)的情況(如果你登陸注冊(cè)的時(shí)候可能密碼用戶名要限制幾位,或者你在評(píng)論一個(gè)帖子的時(shí)候要限制你評(píng)論的字?jǐn)?shù)等等),那么接下來就讓我們一起看看到底要怎樣處理才能更好的實(shí)現(xiàn)對(duì)輸入長(zhǎng)度的控制治力。
一般同學(xué)在看到這個(gè)需求的時(shí)候首先想到的是使用 UITextFieldDelegate的代理方法就直接控制就可以:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
例如:我們具體需求要限制輸入長(zhǎng)度為10,那么就會(huì):
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField == MyTextField) {
if (textField.text.length > 10) {
return NO;
}
}
return YES;
}
缺點(diǎn)是:比如說要求控制10個(gè)字,當(dāng)輸入到第9個(gè)的時(shí)候此蜈,一下打拼音打出來好幾個(gè)字穆役,或者點(diǎn)擊聯(lián)想詞出來好幾個(gè)字的話民镜,那么輸入框里面的字?jǐn)?shù)就大于10個(gè)了乍桂。那么應(yīng)該怎么處理呢?
UITextField有UITextFieldTextDidChangeNotification這個(gè)消息通知(注意:監(jiān)聽消息還要記得解除監(jiān)聽)使用方法:
[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];
}
}
}