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

UITextField切换中文输入,选中所输入的中文时,iOS7不会调用textField:shouldChangeCharactersInRange:replacementString协议方法。

2015-01-30 16:14 507 查看
UITextField切换中文输入,在键盘中输入完后,选中键盘中mark的中文字符时,iOS7中UITextField会调用如下协议方法。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)<a target=_blank name="baidusnap4"></a><strong style="color:black;background-color:#ff66ff">range</strong> replacementString:(NSString *)string;


解决方法:
1、利用通知中心监听UITextFieldTextDidChangeNotification。

[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(textFiledEditChanged:)
name:UITextFieldTextDidChangeNotification
object:self];


- (void)textFiledEditChanged:(NSNotification *)notification
{
if ([notification.object isKindOfClass:[EzvizTokenTextField class]])
{
EzvizTokenTextField *textField = notification.object;

UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
if (!position) {

self.ezvizTokenTextFieldTextLength = [textField.text length];
}
}
}

当键盘中有mark的中文字符时,则根据UITextField实例方法markedTextRange可以获取开始位置以及长度,此时,只要没有选中被mark的字符时,textFiled.text 的 length是会改变的。只有当选中被mark的字符时,markedTextRange返回的开始位置以及长度为0,则UITextPosition则为nil,此时说明textField.text
的 length改变。

2、通过KVO监听textField.text 的length。代码如下:

[self addObserver:self
forKeyPath:@"ezvizTokenTextFieldTextLength"
options:NSKeyValueObservingOptionNew
context:NULL];


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object <a target=_blank name="baidusnap1"></a><strong style="color:black;background-color:#A0FFFF">change</strong>:(NSDictionary *)<strong style="color:black;background-color:#A0FFFF">change</strong> context:(void *)context
{
if (object == self && [keyPath isEqualToString:@"ezvizTokenTextFieldTextLength"])
{
//DDLogInfo(@"ezvizTokenTextFieldTextLength: %d", self.ezvizTokenTextFieldTextLength);
//if (self.ezvizTokenTextFieldTextLength)
{
if (delegate && [delegate respondsToSelector:@selector(textFieldDidEndChanged:)])
{
[delegate textFieldDidEndChanged:self];
}
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object <strong style="color:black;background-color:#A0FFFF">change</strong>:<strong style="color:black;background-color:#A0FFFF">change</strong> context:context];
}
}


从而可以达到在iOS7下监听UITextField输入框内字符变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐