Я пытаюсь завершить сеанс композиции текста программно, когда пользователь печатает какой-то нелатинский символ в приемлемой области DIV (пусть это будет называться редактором позже) в UIWebView (устаревший объект представления в iOS SKD, который встраивает веб-контент в мой гибрид приложение, по какой-то причине мне нужно использовать его вместо WKWebView).
Когда пользователь вводит несколько нелатинских символов с помощью редактора метода ввода (IME), мое приложение будет предлагать некоторый специфичный для домена текст в пользовательском интерфейсе, и пользователь сможет выбрать его.
Однако я обнаружил, что после того, как пользователь выбрал этот специфичный для домена текст, щелкнув собственный пользовательский интерфейс (a UIButton
), и приложение вызвало document.exeCommand('insertText', false, 'my domain text')
, редактор все еще находился в сеансе композиции текста с голубым фоном на текст, который пользователь только что ввел.
Если пользователь нажал какую-то клавишу в IME, compositionend
Будет вызвано событие, и сеанс композиции завершится.
Однако я хочу программно завершить его, чтобы он был более разумным для пользователя. А в другом сценарии мне нужно иметь возможность сначала завершить сеанс композиции текста, а затем ввести этот текст для конкретного домена. Возможно ли это?
Вот пользовательский интерфейс моего гибридного приложения:
Я попытался отправить событие составления обновлений в редактор, вызвал прослушиватель событий, но светло-синий фон все еще находился под текстом, что означает, что сеанс составления текста не был завершен.
Вот код, который я пробовал:
var editor = document.getElementByID("myContendteditableArea")
editor.addEventListener('compositionend', function(e) {
console.log('text composition session end')
})
var event = new CompositionEvent('compositionend')
editor.dispatchEvent(event)
Я также попробовал синий редактор программно, он вызвал «составное» событие, однако это может вызвать нежелательную анимацию и изменение пользовательского интерфейса.
Любая помощь будет признательна, спасибо заранее.