如何在不打字的情况下检测 UITextField 光标移动?
How to detect UITextField cursor move without typing?
当用户只移动光标而不输入新词时(即 (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange) replacementString:(NSString *)string
不会被触发),我如何检测此事件?
UITextField
中有一个 selectedTextRange 属性 从 UITextInput
协议采纳。因此,您可以使用 KVO 订阅此 属性 的更改,或者使用覆盖的方法 setSelectedTextRange
实现您自己的子类。
在viewDidAppear中添加selectedTextRange
属性观察者,
[self.txtfield addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
然后为此添加功能 属性,
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"selectedTextRange"] && self.txtfield == object)
NSLog(@"cursor moved");
}
当您移动光标而不输入任何文本时,它应该打印 "cursor moved"。
我非常确定这是用于光标移动的 UITextField 的任何本机委托,但您可以子类化 UITextField 并且可以覆盖方法
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
}
只要光标移动,就应该可以检查获取光标位置。
当用户只移动光标而不输入新词时(即 (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange) replacementString:(NSString *)string
不会被触发),我如何检测此事件?
UITextField
中有一个 selectedTextRange 属性 从 UITextInput
协议采纳。因此,您可以使用 KVO 订阅此 属性 的更改,或者使用覆盖的方法 setSelectedTextRange
实现您自己的子类。
在viewDidAppear中添加selectedTextRange
属性观察者,
[self.txtfield addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
然后为此添加功能 属性,
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"selectedTextRange"] && self.txtfield == object)
NSLog(@"cursor moved");
}
当您移动光标而不输入任何文本时,它应该打印 "cursor moved"。
我非常确定这是用于光标移动的 UITextField 的任何本机委托,但您可以子类化 UITextField 并且可以覆盖方法
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
}
只要光标移动,就应该可以检查获取光标位置。