Для> = iOS 13
Этого можно достичь sh, реализовав функцию textFieldDidChangeSelection:
с объявлением локальной переменной, в которой будет храниться последний выбранный текстовый диапазон. текстового поля. Вам нужно сохранить последний выбор, чтобы получать уведомления только о новом выборе, а не о других изменениях TextField (например, путем ввода).
class MyViewController: UIViewController {
private var lastSelectedText = ""
// Rest of your MyViewController code
}
extension MyViewController: UITextFieldDelegate {
func textFieldDidChangeSelection(_ textField: UITextField) {
if let textRange = textField.selectedTextRange, let selectedText = textField.text(in: textRange), selectedText != lastSelectedText {
lastSelectedText = selectedText
// Handle change of selectedText or selectedTextRange
}
}
}
Для iOS 12> =
Как вы упомянули, вы можете переопределить свойство selectedTextRange
UITextField. Я только что проверил это, и он работает плавно при каждом изменении курсора.
class MyTextField: UITextField {
override var selectedTextRange: UITextRange? {
get {return super.selectedTextRange}
set {
// Handle newValue here
super.selectedTextRange = newValue
}
}
}