Пользовательский inputView для UITextField, как мне направить вход обратно в текстовое поле?

Я установил пользовательский inputView в мой UITextField. Мне нужен способ отображения данных, выбранных в моем пользовательском inputView в UITextField. Я хотел бы добиться этого так же, как это делает системная клавиатура.

Кто-нибудь знает, как это делается? Как системная клавиатура получает ссылку на UITextField, которая является первым ответчиком?

Ответ 1

Как системная клавиатура получает ссылку на поле UIText, которое является первым ответчиком?

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

Вместо этого вы можете добавить ссылку на текстовое поле в представлении ввода (я предполагаю, что ваше представление ввода является пользовательским подклассом UIView):

@property(nonatomic, assign) UITextField* target;

Затем используйте методы делегата UITextField в вашем контроллере просмотра, чтобы увидеть, когда сфокусировано текстовое поле:

- (void)textFieldDidBeginEditing:(UITextField*)textField
{
    if ( [textField.inputView isKindOfClass:[MyInputView class]] )
        ((MyInputView*)textField.inputView).target = textField;
}

- (void)textFieldDidEndEditing:(UITextField*)textField
{
    if ( [textField.inputView isKindOfClass:[MyInputView class]] )
        ((MyInputView*)textField.inputView).target = nil;
}

Ответ 2

При отправке ввода из пользовательского ввода в текстовое поле обратите внимание, что вы можете (должны) использовать методы протокола UIKeyInput, которые соответствуют UITextField. А именно:

- (void)deleteBackward;
- (void)insertText:(NSString *)text;