UITextInputTraits.returnKeyType не работает в расширении клавиатуры?

Поэтому я разрабатываю расширение клавиатуры iOS и хочу, чтобы текст моей кнопки возврата изменился в соответствии с returnKeyType, однако, похоже, этот API не работает должным образом с расширением клавиатуры.

У меня есть приложение для хостинга с некоторым UITextField, и когда я использую встроенную английскую клавиатуру, его клавиша возврата правильно изменяется в зависимости от returnKeyType, которое я установил для UITextField.

Но для собственного расширения клавиатуры я запускаю отладчик и всегда вижу

self.textDocumentProxy.returnKeyType = .default

Моя логика очень проста, у меня есть функция для изменения возвращаемого текста

public func changeReturnText() {
    var text: String
    let returnKeyType = self.textDocumentProxy.returnKeyType
    SpeedLog.log("Return Key Type: \(returnKeyType?.rawValue ?? -1)")
    switch returnKeyType ?? .default {
    case .continue:
        text = "繼續"
    case .done:
        text = "完成"
    case .go, .google, .yahoo:
        text = "前往"
    case .search:
        text = "搜尋"
    case .next:
        text = "下一個"
    case .send:
        text = "送出"
    default:
        text = "換行"
    }
    returnKey.text = text
}

Затем я вставил эту функцию в свой init()

Мне удалось запустить отладчик против этого, но этот self.textDocumentProxy.returnKeyType всегда возвращает .default, даже если я установил для UITextField returnKeyType значение .done, в то время как встроенная английская клавиатура работает нормально.

Любая идея? Очень признателен.


person Evan Chu    schedule 21.01.2018    source источник
comment
Вы говорите, что поместили его в свой инициализатор, поэтому я предполагаю, что система на самом деле не отправила вам последнее состояние для textDocumentProxy. Вероятно, вам следует вызывать эту функцию всякий раз, когда вы получаете обновление, например textDidChange.   -  person Ben Pious    schedule 22.01.2018
comment
@BenPious Вы совершенно правы! Большое тебе спасибо.   -  person Evan Chu    schedule 22.01.2018
comment
Спасибо, и я попробую в моем приложении для отладки. Я сделал это с учетом загрузки и вроде еще рано.   -  person walterlv    schedule 22.01.2019


Ответы (1)


Как заметил Бен Пиус, очевидно, я звонил textDocumentProxy слишком рано. И отметил, что textDocumentProxy доступен только после того, как кадр отличен от нуля.

person Evan Chu    schedule 22.01.2018