Как реализовать набор настроек для пользовательской клавиатуры?

Я пишу свою собственную клавиатуру. И я не знаю, как подключить свой набор настроек (настройка в телефоне) с помощью расширения клавиатуры, поэтому, если кто-то изменит настройки из настроек телефона и после этого откройте какое-либо текстовое поле, чтобы написать что-то, о чем моя клавиатура уже знала, чем изменения, которые он сделал в настройки. Я попытался создать группу приложений для подключения моего приложения к моему расширению, и, по моему мнению, контроллер добавляет наблюдателя для NSUserDefaultsDidChangeNotification что-то вроде:

 var notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.addObserver(self, selector: "settingsDidChange:", name: NSUserDefaultsDidChangeNotification, object: nil) 

Когда кто-то вносит изменения в настройки settingsDidChange: будет вызываться метод, и я устанавливаю все, что мне нужно, чтобы прочитать в моей группе приложений, чтобы прочитать его из моего расширения. Но этот метод будет вызван только тогда, когда человек откроет мое приложение, поэтому, если кто-то изменит настройку из настроек телефона и не откроет приложение, моя клавиатура не изменится. так как я могу реализовать свой набор настроек для моей клавиатуры?

3 Solutions collect form web for “Как реализовать набор настроек для пользовательской клавиатуры?”

Я еще не работал с расширением клавиатуры, но столкнулся с аналогичной проблемой с расширением Today и WatchKit. NSUserDefaultsDidChangeNotification сообщения только в том же процессе, который внес изменения. Таким образом, изменение внутри настроек приложения iPhone не вызывает это уведомление наблюдателям в процессе расширения.

Однако уведомления Darwin ( CFNotificationCenterGetDarwinNotifyCenter ) CFNotificationCenterGetDarwinNotifyCenter сообщения другим процессам.

Вот суть улавливания NSUserDefaultsDidChangeNotification внутри приложения iPhone, размещение уведомления Darwin для расширений, улавливание его внутри расширения и, наконец, преобразование его в стандартную NSNotification для более легкого использования: https://gist.github.com/phatblat / f640416c15e11b685511

Обратите внимание, что вы не можете отправить какую-либо userInfo в уведомление Darwin, поэтому вам все равно необходимо предоставить группу приложений и создать экземпляр NSUserDefaults с NSUserDefaults initWithSuiteName: с вашим идентификатором группы приложений.

В своем class KeyboardViewController: UIInputViewController самой клавиатуры, вы должны добавить код уведомления, который вы написали. Где вы сейчас пишете?

Подкласс UIInputViewController работает, когда используется клавиатура, а не только при запуске приложения. Также вы можете просто загружать материал NSUserDefaults внутри UIInputViewController каждый раз, когда загружается представление, и таким образом вы избегаете использования уведомлений. По сути, вы выбираете настройки каждый раз при загрузке клавиатуры. В зависимости от того, сколько у вас настроек, это может быть или не быть оптимальным.

Кажется, это ошибка в iOS 8.0.2 даже на устройстве (я тестировал iPad iPad). Пользовательские настройки клавиатуры не сохраняются и не могут быть прочитаны из расширения.

Решение, требующее полного доступа, описано здесь: https://stackoverflow.com/a/26172466/840742

  • Вид таблицы, обозначающий более чем одну ячейку Swift 3
  • Специальная ссылка JSQMessagesViewController
  • Регулярно переключайте контроллер UIAlert
  • Тихий push-уведомление для уведомления с определенной полезной нагрузкой
  • Как удалить «Добавить в iCloud Drive» из контроллера UIActivity?
  • Swift - как получить последние 3 фотографии из библиотеки фотографий?
  • Swift - как задать угловой радиус изображения
  • Как настроить общую инфраструктуру для iOS и OS X
  • Сенсорный ID не показывает StoreKit
  • Портирование подклассов фильтра GPUImage в Swift
  • Как я могу получить доступ к значениям RGB для UIColor?
  • Interesting Posts

    Сделать статический UIView липким при прокрутке UIScrollView

    Google Map не удается открыть веб-ссылку на мобильных устройствах

    О UIColor, это ошибка или что-то еще?

    Передача параметров с использованием схемы URL

    Покрытие кода с нескольких устройств или версий iOS

    как выполнить backspace и удалить?

    Когда iOS очищает каталоги локального приложения ./tmp?

    Какие версии iOS я надеюсь сегодня поддержать?

    Как использовать GCDAsyncUdpSocket для многоадресной передачи через Wi-Fi и Bluetooth

    iOS 10.0 – 10.1: AVPlayerLayer не показывает видео после использования AVVideoCompositionCoreAnimationTool, только аудио

    Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9813) в приложении Cordova

    Как создать приложение Iphone без MAC OS

    Можно ли скрыть кнопку «Действие» в представлении UIDocumentInteractionController?

    Шрифты, не подходящие должным образом в UILabel – Ascender или Descender обрезаются

    UIScrollView в ScrollView – ScrollBars не отображается

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.