【问题标题】:UITextField -- observe changes to selectedTextRange?UITextField - 观察 selectedTextRange 的变化?
【发布时间】:2013-03-03 23:25:02
【问题描述】:

有什么方法可以观察 UITextField 的 selectedTextRange 的变化吗?

我尝试观察所有 UIControlEvents。但是更改 selectedTextRange 不会触发 UIControlEvent。

另一个死胡同——UIKit 类不符合 KVO。

然后是 UITextFieldTextDidChangeNotification。但那是对文本的更改。

有什么想法吗?

【问题讨论】:

    标签: ios text uitextfield selection


    【解决方案1】:

    子类UITextField如下。

    @interface WJTextField : UITextField
    @end
    
    @protocol WJTextFieldDelegate <UITextFieldDelegate>
    - (void) textFieldDidChangeSelection: (UITextField *) textField;
    @end
    

    实施:

    @implementation WJTextField
    
    - (void) setSelectedTextRange: (UITextRange *) selectedTextRange
    {
        [super setSelectedTextRange: selectedTextRange];
        if ([self.delegate respondsToSelector: @selector(textFieldDidChangeSelection:)])
            [(id <WJTextFieldDelegate>) self.delegate textFieldDidChangeSelection: self];
    }
    
    @end
    

    然后将-textFieldDidChangeSelection: 添加到您的文本字段的委托中。

    警告:此委托消息仅在光标移动时发送,不会在键入或粘贴文本时发送,对于那些您必须实现的事件textField:shouldChangeCharactersInRange:replacementString:,选择范围将设置为range.location + [string length](如果您返回YES)或保持不变(如果您返回NO)。

    【讨论】:

    • 我只想提一下,在输入或粘贴文本时确实会触发。至少在 iOS8 中,我没有检查其他任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2010-11-09
    • 2018-02-26
    • 2015-09-13
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多