Запретить пользовательскую клавиатуру в текстовом поле
Я экспериментировал с тем, как пользовательская клавиатура влияет на мое приложение. Я установил Swype на свой iPhone 6.
Я обнаружил, что в некоторых моих представлениях, где у меня есть пользовательское свойство inputView, заданное в текстовом поле, клавиатура Swype переопределяет и представляет вместо моего сборщика. Это полностью нарушает мой интерфейс и не может быть разрешено.
Есть ли способ явно указать iOS 8 только использовать inputView, который я установил?
Возможно, это ошибка? Совсем не ожидаемое поведение позволяет третьей стороне переопределить мою спецификацию ввода?
Ответы
Ответ 1
Используя ответ от Pablo Ezequiel Romero в качестве отправной точки, я смог заставить все работать для меня. По существу, вместо использования UIViewController
для пользовательской клавиатуры используйте UIInputViewController
и поместите свои элементы управления в UIInputViewController
inputView
. Затем присвойте inputView
вашего UITextField
или UITextView
inputView
UIInputViewController
.
Если вы используете автоматическую компоновку, вам нужно убедиться, что вы все правильно настроили и не забудьте установить начальное ограничение высоты на inputView и установить его приоритет ниже уровня max 999 (я использовал 800). Любая высота будет; система заменит ваше ограничение одним из своих. В более низком приоритете избегают конфликтов авто макета. (Для меня, если бы я не включил это ограничение, окончательный вид вообще не имел бы высоты).
Когда я сделал все это, я смог включить и отключить пользовательскую клавиатуру (внутреннее приложение) и любое стороннее расширение клавиатуры.
Ответ 2
Вы можете отключить пользовательскую клавиатуру для своего приложения со следующим кодом:
включить это в свой делегат приложения:
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
return NO;
}
return YES;
}
Ответ 3
У меня была аналогичная проблема, и я смог ее исправить с помощью UIInputViewController. В основном представление, которое я установил в inputView, является представлением моего подкласса UIInputViewController. Я использовал UIViewController, но после замены контроллера базового представления он начал хорошо работать.