Получение текущего активного языка клавиатуры как NSLocale

Я уже нашел много подходов для этого, но нет рабочего решения. Вот что я пробовал и не работал.

(1) Простой вызов primaryLanguage()

UITextInputMode().primaryLanguage

→ всегда возвращает ноль :-/

(2) Подписка на уведомления UITextInputCurrentInputModeDidChangeNotification

override func viewDidLoad() {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeInputMode:", name: UITextInputCurrentInputModeDidChangeNotification, object: nil)
}

func changeInputMode(sender : NSNotification) {
    ...?!
}

Уведомление срабатывает, но неясно, как я могу извлечь текущую информацию о языке из уведомления.

(3) Использование activeInputModes()

let localeIdentifier = UITextInputMode.activeInputModes().first as? UITextInputMode
var locale:NSLocale = NSLocale(localeIdentifier: localeIdentifier.primaryLanguage!)
println("Input Mode Language \(localeIdentifier.primaryLanguage!)")

Это всегда предоставляет один и тот же массив всех доступных клавиатур, без информации о действительно активной.

Как получить NSLocale текущей активной клавиатуры?


person Bernd    schedule 23.02.2015    source источник


Ответы (1)


Вы можете получить доступ к primaryLanguage из каждого текстового поля, обратившись к текстовым полям textInputMode следующим образом:

var language = textfield.textInputMode?.primaryLanguage
person Christian    schedule 23.02.2015
comment
Отлично, это работает. Единственным недостатком является то, что он возвращает значение только после того, как текстовое представление или текстовое поле стали активными — в противном случае оно равно нулю. Было бы неплохо также получить активный язык клавиатуры сразу после viewDidLoad и даже до его показа. - person Bernd; 24.02.2015
comment
Клавиатура не существует, пока текстовое поле не станет активным. - person Chris; 04.10.2018