如何在不键入的情况下检测UITextField游标移动?

时间:2017-08-03 19:18:55

标签: ios objective-c xcode uitextfield uitextfielddelegate

当用户仅在不键入新单词的情况下移动光标(即(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange) replacementString:(NSString *)string未触发)时,如何检测此事件?

3 个答案:

答案 0 :(得分:3)

在viewDidAppear中添加var thelist = $("#ms-fmultiselect .ms-selection .ms-list li"); $.each(thelist, function (i, obj) { thearray.push({ id: $(".ms-selected").val() }); }); 属性观察者,

selectedTextRange

然后为此属性添加函数

[self.txtfield addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld  context:nil];

当您移动光标而不键入任何文本时,它应该打印"光标移动"。

答案 1 :(得分:0)

UITextField协议中采用UITextInputselectedTextRange属性。因此,您可以使用KVO订阅此属性的更改,也可以使用方法setSelectedTextRange覆盖实现您自己的子类。

答案 2 :(得分:0)

我确信这是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)")
}

}

每当光标移动时,它应该可以检查获取光标位置。