Запретить пользовательскую клавиатуру в текстовом поле

Я экспериментировал с тем, как пользовательская клавиатура влияет на мое приложение. Я установил 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, но после замены контроллера базового представления он начал хорошо работать.