Делегат UITextView shouldChangeTextInRange не вызывается, когда клавиатура выбрана на китайский (упрощенный) — рукописный ввод в Swift 4.2

Вот мой пример кода:

class ViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var textView_editingView: UITextView!
override func viewDidLoad() {
    super.viewDidLoad()
    textView_editingView.text = ""
    textView_editingView.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    print("Not Called")
    return true
}

func textViewDidChange(_ textView: UITextView) {
    print("Called")
}
}

Когда я меняю тип клавиатуры на «Китайский (упрощенный) — рукописный ввод», «shouldChangeTextIn range» (UITextViewDelegate) не вызывается при вводе текста.

В этом делегате есть определенные проверки, которые нужно вызывать, такие как упоминания, хэштеги, URL-адреса. Поскольку этот делегат не вызывается, моя логика для этих проверок дает сбой при изменении клавиатуры. В остальном все нормально работает на обычной английской клавиатуре.

Обратите внимание: я использую клавиатуру по умолчанию, которая доступна в настройках клавиатуры XCode Simulator, и она также воспроизводится на iPhone 7 Plus.


person Dhairya Uniyal    schedule 11.10.2019    source источник


Ответы (1)


Честно говоря, у меня та же проблема, и похоже, что рукописный ввод на любом языке имеет ту же проблему. Мой обходной путь состоит в том, чтобы вместо этого наблюдать «func textFieldDidEndEditing (UITextField)» и делать все, что мне нужно, в «func textFieldShouldEndEditing (UITextField) -> Bool», предположительно.

person a-chhiong    schedule 13.03.2020