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

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 输入框内字符变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值