Определить тип представления объекта ввода в настраиваемом расширении клавиатуры

Я разрабатываю пользовательскую клавиатуру, используя расширение приложения в iOS 8.

У меня есть клавиша возврата, и при нажатии я хочу проверить, является ли входной объект UITextView, а затем перейти к следующей строке, используя следующий код: [self.textDocumentProxy insertText:@"\n"];. И если входной объект является UITextField, то убрать клавиатуру следующим образом: [self dismissKeyboard];

Что-то вроде этого:

- (void) returnKeyPressed
{
    if (inputObjectIsTextView)
    {
        [self.textDocumentProxy insertText:@"\n"];
    }
    else if (inputObjectIsTextField)
    {
        [self dismissKeyboard];
    }
}

Вопрос: как определить, какое представление ввода редактируется в данный момент?


person iOS Dev    schedule 19.08.2014    source источник


Ответы (3)


Нет необходимости определять входное представление как UITextField или UITextView для ввода новой строки.

как описано здесь под заголовком "API Быстрый старт для пользовательских клавиатур"

говорит

[self.textDocumentProxy insertText:@"\n"];   // In a text view, inserts a newline character at the insertion point

Это означает, что нет необходимости в обнаружении, вы можете сделать это таким образом

- (void) returnKeyPressed
{
    [self.textDocumentProxy insertText:@"\n"];
}

Это будет выполняться, если inputView имеет значение UITextView, и не будет выполняться, если тип ввода равен UITextField.

Я создал клавиатуру и протестировал ее, прежде чем публиковать здесь.

person Anand Suthar    schedule 19.08.2014

Вы не можете этого сделать, если вы посмотрите документацию, вы увидите, что нет общедоступного API для обнаружения объекта ввода текста расширений клавиатуры.

Из Дока. Поскольку пользовательская клавиатура может рисовать только в основном виде своего объекта UIInputViewController, она не может выбирать текст. Выбор текста находится под контролем приложения, использующего клавиатуру. Если это приложение предоставляет интерфейс меню редактирования (например, для вырезания, копирования и вставки), клавиатура не имеет к нему доступа.

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

person Ezimet    schedule 19.08.2014

Попробуйте что-то вроде этого, возьмите ссылку на активное представление как «inputViewObject», затем попробуйте

- (void) returnKeyPressed
{

    if (inputViewObject.class==[UITextView class])
    {
        [self.textDocumentProxy insertText:@"\n"];
    }
    else if (inputViewObject.class==[UITextField class])
    {
        [self dismissKeyboard];
    }
}

Надеюсь, поможет.

person sabyasachi    schedule 19.08.2014
comment
Извините, но я не совсем понимаю ваше предложение. Не могли бы вы объяснить более подробно? Спасибо. - person iOS Dev; 19.08.2014