Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField--观察对所选Extange的更改?_Ios_Text_Uitextfield_Selection - Fatal编程技术网

Ios UITextField--观察对所选Extange的更改?

Ios UITextField--观察对所选Extange的更改?,ios,text,uitextfield,selection,Ios,Text,Uitextfield,Selection,是否有任何方法可以观察UITextField的selectedTextRange的更改 我试着观察所有的事件。但是更改所选的extrange不会触发uicontrol事件 另一个死胡同——UIKit类不符合KVO 然后是UITextFieldTextDidChangeNotification。但这是对文本的修改 有什么想法吗?子类UITextField,如下所示 @interface WJTextField : UITextField @end @protocol WJTextFieldDel

是否有任何方法可以观察UITextField的selectedTextRange的更改

我试着观察所有的事件。但是更改所选的extrange不会触发uicontrol事件

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

然后是UITextFieldTextDidChangeNotification。但这是对文本的修改


有什么想法吗?

子类
UITextField
,如下所示

@interface WJTextField : UITextField
@end

@protocol WJTextFieldDelegate <UITextFieldDelegate>
- (void) textFieldDidChangeSelection: (UITextField *) textField;
@end
@接口WJTextField:UITextField
@结束
@协议WJTextFieldDelegate
-(void)textFieldDidChangeSelection:(UITextField*)textField;
@结束
实施:

@implementation WJTextField

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

@end
@实现WJTextField
-(无效)设置所选的扩展项:(UITextRange*)所选的扩展项
{
[超级设置SelectedExtange:SelectedExtange];
if([self.delegate respondsToSelector:@selector(textfielddichangeselection:)]))
[(id)self.delegate textfielddChangeSelection:self];
}
@结束
然后将
-textfielddchangeselection:
添加到文本字段的委托中


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

我只想指出,在键入或粘贴文本时确实会触发此操作。至少在iOS8中,我没有检查任何其他内容。