Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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


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

Ответ 2

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

Ответ 3

Сначала создайте представление (я сделал это в отдельном файле 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;

Ответ 4

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

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

Конкретные подробности приведены в моем другом ответе на эту тему: fooobar.com/questions/98654/...

Ответ 5

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

inputView

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

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

inputAccessoryView 

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