您的位置:首页 > 产品设计 > UI/UE

UITextField对中英文混合输入的长度限制

2014-04-23 15:38 197 查看
转载自: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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: