Использовать пользовательскую цифровую клавиатуру только на iPad

Новое в разработке для iPad. Я хотел бы использовать пользовательскую цифровую клавиатуру (с помощью модуля) на iPad, но родную на iPhone. Можно ли сделать расширение для UITextField, UITextView для установки/получения inputView/keyboardType? Или есть другое решение?

myTextField.keyboardType = .decimalPad

extension UITextField {
    ....

    case .decimalPad:
       if UIDevice.current.userInterfaceIdiom == .pad {
    ...
}

person Dan    schedule 06.02.2018    source источник


Ответы (1)


Вы можете установить собственное представление ввода, используя свойство inputView для UITextField. Если он не установлен, клавиатура по умолчанию (как настроено для текстового поля) появится, когда текстовое поле станет первым ответчиком. Так что устанавливайте только свой пользовательский вид цифровой клавиатуры при работе на iPad и оставьте его как есть на iPhone.

ИЗМЕНИТЬ

Изначально я указал inputAccessoryView вместо inputView, отсюда и путаница в комментариях.

person dr_barto    schedule 06.02.2018
comment
Спасибо, могу ли я каким-то образом переопределить свойство inputAccessoryView без создания подклассов или мне нужно установить его для каждого UITextField в приложении? (Без каких-либо изменений пользовательская клавиатура появляется в середине экрана, используя inputAccessoryView..) - person Dan; 06.02.2018
comment
Плохо, вы хотите inputView, а не inputAccessoryView... извините, что перепутал. inputView фактически заменяет клавиатуру. Не нужно создавать подклассы, просто установите представление для этого свойства. - person dr_barto; 06.02.2018
comment
Спасибо, интересно, есть ли способ установить свойство inputView once для всех UITextFields в приложении - если iPad? Я полагаю, мне нужно создать подкласс UITextField, поскольку это свойство нельзя переопределить в расширении? - person Dan; 08.02.2018
comment
Если вы не хотите создавать подклассы, вы можете добавить расширение со статическим фабричным методом а-ля withPlatformSpecificKeyboard, который инкапсулирует логику диспетчеризации платформы; вы бы использовали эту фабрику вместо стандартного инициализатора для создания UITextField экземпляров. - person dr_barto; 08.02.2018