Как заставить UITextField писать только одним языком

На самом деле все совсем иначе, чем говориться в заголовке. У одних моих друзей есть сканер штрих-кодов. Этот сканер подключается по Bluetooth и эмулирует ввод  с клавиатуры. И все было бы хорошо, но он нажимает клавиши на клавиатуре, даже в другом языке. То есть, человек переключился на русский, чтобы пообщаться в чате с коллегой, а затем пытается сканировать код. В результате он получает странное сочетание букв на русском языке вместо кода в раскладке en_US.

Начиная с версии iOS 7  мы можем это «починить». Я воспользовался советом из этого вопроса на StackOverflow, и сделал у себя подкласс UITextField. В нем я переопределил метод — (UITextInputMode *) textInputMode в точности как советует автор ответа с наибольшим рейтингом

- (UITextInputMode *) textInputMode {
  for (UITextInputMode *tim in [UITextInputMode activeInputModes]) {
    NSLog(@"%@",tim.primaryLanguage);
    if ([[self langFromLocale:self.userDefinedKeyboardLanguage]
isEqualToString:[self langFromLocale:tim.primaryLanguage]]) return tim;
  }
  return [super textInputMode];
}

В результате, теперь сканер в положенные ему поля сканирует, «печатая» только на клавиатуре en_US. Ее я выставляю в новое свойство UITextField self.userDefinedKeyboardLanguage

В завершении надо сказать, что конечно же, я не заставил писать UITextField только одним языком. Пользователь всегда может сменить язык, но первый язык (клавиатура), которые будут ему показаны, когда он выберет это поле, будет установленный вами.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s