Обновите отображение UIKeyboardAppearance при отображении клавиатуры

#ios #objective-c #cocoa-touch #keyboard #uikit

#iOS #objective-c #cocoa-touch #клавиатура #uikit

Вопрос:

Cocoa Touch позволяет изменять внешний вид клавиатуры, устанавливая свойство keyboardAppearance протокола UITextInputTraits, который реализован в классах UITextField и UITextView.

Похоже, что обновление свойства keyboardAppearance, когда клавиатура уже отображается на экране, не обновляет внешний вид клавиатуры.

В качестве обходного пути я думал отключить клавиатуру и снова открыть ее. Есть ли лучший способ решить проблему?

Комментарии:

1. Я не верю, что когда-либо видел стили переключения типов клавиатуры на экране. Даже если бы вы могли, я не удивлюсь, если это нарушает правила пользовательского интерфейса Apple во время проверки. Что конкретно вы пытаетесь сделать, может быть, мы можем предложить альтернативные идеи?

2. Это часть функции автоматической смены темы (светлая / темная или день / ночь), аналогичной той, что реализована в Tweetbot и Tick. Первые просто используют темную клавиатуру для обеих тем, в то время как вторые просто отключают клавиатуру при автоматической смене темы.

3. О, я понимаю. Извините, тогда у меня нет лучшего ответа. Может быть, установите тему на основе времени до открытия клавиатуры? По крайней мере, тогда при следующем естественном открытии клавиатуры она будет соответствовать.

Ответ №1:

Это досадное ограничение, у меня такое же требование.

Единственным вариантом, который я смог найти, было вызвать:

 self.textView.resignFirstResponder()
self.textView.keyboardAppearance = UIKeyboardAppearance.Dark
self.textView.becomeFirstResponder()
  

Это работало без обновления, но поскольку я подключен к UIKeyboardWillShow / HideNotifications, Которые изменяют наборы содержимого и т. Д., Произошла видимая перестановка содержимого под клавиатурой.