转载自:http://blog.sina.com.cn/s/blog_60f977e70101g4gj.html
主要步骤:
1. 添加监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFiledEditChanged:)
name:@"UITextFieldTextDidChangeNotification"
object:alertTextField];
2. 实现监听方法
a. 键盘可以输入,但是中文不能输入到控件中
- (void)textFiledEditChanged:(NSNotification *)obj
{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
NSString *lang = [textField.textInputMode primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"])
{ // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position)
{
if (toBeString.length > kNameMaxLength)
{
textField.text = [toBeString substringToIndex:kNameMaxLength];
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else
{
if (toBeString.length > kNameMaxLength)
{
textField.text = [toBeString substringToIndex:kNameMaxLength];
}
}
}
b. 键盘禁止输入
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"%d-%d", textField.text.length, (string.length - range.length));
return textField.text.length + (string.length - range.length) <= kNameMaxLength;
}
- (void)textFiledEditChanged:(NSNotification *)notification {
UITextField *textField = notification.object;
if (textField.markedTextRange == nil && textField.text.length > kNameMaxLength) {
[textField setText:[textField.text substringToIndex:kNameMaxLength]];
}
}
3. 移除监听器:
[[NSNotificationCenter defaultCenter]removeObserver:self
name:@"UITextFieldTextDidChangeNotification"
object:textField];