UITextField如何限制限制文本輸入長度
- 原理和UITextView限制文本輸入長度原理一樣,不同的是UITextField可以監(jiān)聽UIControlEventEditingChanged事件獲取到UITextField文本輸入改變;UITextView需要監(jiān)聽UITextViewTextDidChangeNotification通知
[field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];
1. 具體實(shí)現(xiàn)代碼
- (void)testTextField
{
UITextField *field = [[UITextField alloc] init];
field.frame = CGRectMake(100, 155, 200, 50);
[self.view addSubview:field];
field.backgroundColor = [UIColor grayColor];
[field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];
}
- (void)fieldTextDidChange:(UITextField *)textField
{
/**
* 最大輸入長度,中英文字符都按一個(gè)字符計(jì)算
*/
static int kMaxLength = 10;
NSString *toBeString = textField.text;
// 獲取鍵盤輸入模式
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
// 中文輸入的時(shí)候,可能有markedText(高亮選擇的文字),需要判斷這種狀態(tài)
// zh-Hans表示簡體中文輸入, 包括簡體拼音瓦呼,健體五筆,簡體手寫
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textField markedTextRange];
//獲取高亮選擇部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字恨豁,表明輸入結(jié)束,則對已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
if (!position) {
if (toBeString.length > kMaxLength) {
// 截取子串
textField.text = [toBeString substringToIndex:kMaxLength];
}
} else { // 有高亮選擇的字符串库物,則暫不對文字進(jìn)行統(tǒng)計(jì)和限制
}
} else {
// 中文輸入法以外的直接對其統(tǒng)計(jì)限制即可,不考慮其他語種情況
if (toBeString.length > kMaxLength) {
// 截取子串
textField.text = [toBeString substringToIndex:kMaxLength];
}
}
}
- iOS技術(shù)開發(fā)交流QQ群: 579572313
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者