Как создать пользовательскую клавиатуру

Как мне создать пользовательскую клавиатуру / клавиатуру, которая будет отображаться, когда кто-то нажимает на UITextField? Я хотел бы отобразить клавиатуру с кнопками a, b, c, 1, 2, 3 и enter, ничего больше. Клавиатура должна работать и вести себя как стандартная клавиатура (в поведении), но она определенно будет выглядеть по-другому.

Я не могу найти ни одного примера, и лучшее, что я нашел, это отфильтровать символы с существующей клавиатурой, что является неприемлемым решением.

Я думаю, что вы ищете « Руководство по программированию для текста, Интернета и редактирования для iOS »

Рамка UIKit включает в себя поддержку пользовательских видов ввода и входных аксессуаров. Ваше приложение может заменить свое собственное представление ввода для системной клавиатуры, когда пользователи редактируют текст или другие формы данных в представлении. Например, приложение может использовать пользовательское представление ввода для ввода символов из рунического алфавита. Вы также можете подключить вид вспомогательного устройства ввода к системной клавиатуре или к пользовательскому представлению ввода; этот аксессуар просматривается в верхней части основного вида ввода и может содержать, например, элементы управления, которые каким-либо образом влияют на текст, или метки, отображающие некоторую информацию о тексте.

Чтобы получить эту функцию, если ваше приложение использует объекты UITextView и UITextField для редактирования текста, просто назначьте пользовательские представления свойствам inputView и inputAccessoryView. Эти пользовательские представления отображаются, когда текстовый объект становится первым ответчиком …


Это может послужить хорошим введением: настройка клавиатуры iOS

Вы можете использовать библиотеку Custom-iOS-Keyboards в Github.

Прежде всего создайте представление (я сделал это в отдельном файле nib и загрузил его таким образом):

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView" owner:self options:nil]; keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0]; 

После этого я установил его как входное представление для текстового поля, где я хочу его использовать (и на самом деле это короткий ответ на ваш вопрос;)):

  [self.propertyEditor setInputView:keyBView]; 

Когда вы нажимаете на поле, я прокручиваю щётку вида (если необходимо), чтобы не закрывать поле:

 CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor]; CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view]; CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height; CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height; CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height; CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator)); animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction); CGRect viewFrame = self.tableViewController.view.frame; viewFrame.origin.y -= animateDistance; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; [self.tableViewController.view setFrame:viewFrame]; [UIView commitAnimations]; 

Когда редактирование закончено, я прокручиваю представление вниз:

  CGRect viewFrame = self.tableViewController.view.frame; viewFrame.origin.y += animateDistance; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; [self.tableViewController.view setFrame:viewFrame]; [UIView commitAnimations]; 

Ограничения, которые я использую, устанавливаются следующим образом:

 static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3; static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180; static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1; static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2; 

Вы хотите установить значение для

 inputView 

на вашем UITextField. Вам необходимо будет полностью реализовать новую клавиатуру или механизм ввода в представлении, которое вы предоставляете.

С другой стороны,

 inputAccessoryView 

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

К сожалению, приведенное выше «Руководство по программированию для текста, Интернета и редактирования для iOS» не дает никакой информации о том, что делать с символом после нажатия клавиши. Это, безусловно, сложная задача при внедрении клавиатуры в iOS.

Я создал полный рабочий пример шестнадцатеричной цифровой клавиатуры, которую можно легко настроить, как вам нужно.

Конкретные подробности приведены в моем другом ответе на эту тему: https://stackoverflow.com/a/13351686/937822

  • Отправка изображений с помощью пользовательской клавиатуры iOS 8?
  • Прокрутка содержимого Tableview при отображении клавиатуры
  • iOS: Как обнаружить клавиши escape / control на аппаратной клавиатуре Bluetooth?
  • iOS 8 Swift: Как сохранить клавиатуру, отображаемую при условии, что UIAlercontroller представлен в моделях?
  • Как определить клавиатуру iOS, когда она находится между контроллерами?
  • Проблемы с клавиатурой iOS8
  • Найти язык текущей клавиатуры
  • Клавиатура не будет отменена в приложении
  • Пользовательская клавиатура iOS - камера не работает
  • Есть ли способ отключить прозрачность на клавиатуре в iOS 7?
  • Как я могу найти часть моего представления, которое не покрывается клавиатурой (UIModalPresenationStyleFormSheet)?
  • Interesting Posts

    Parse – запрос после определенной строки

    Список шрифтов, предоставляемых приложением (iOS)

    как отключить автоматическую компоновку только для одного вида (не для всей истории) xcode

    Тестирование модулей iOS с анимацией

    Панель навигации становится прозрачной, если ее установить на прозрачный

    UIImagePickerController сбой при использовании PhotoLibrary в качестве источника

    Как запустить и остановить CMMotionManager startAccelerating и stopAccelerating в то время как iphone в режиме ускорения или в режиме ожидания?

    Блокировка FMDatabase, лучшая практика для использования в классе

    Невозможно создать выходные соединения с субблоками в Interface Builder (Xcode 5)

    iOS создает программное событие касания

    Два вида предупреждений в одном представлении контроллера – buttonIndex Response

    iCloud Keychain уведомляет об обновлении

    Признать, если пользователь определил собственную учетную запись facebook в настройках iOS 6

    Изменение ширины UIBarButtonItem в UINavigationBar

    Приостановка игры SpriteKit – UIApplicationWillResignActive vs. UIApplicationDidBecomeActive?

    Давайте будем гением компьютера.