Как представить JSQMessagesViewController с уже поднятой клавиатурой?

Я использую библиотеку пользовательского интерфейса обмена сообщениями с открытым исходным кодом для приложения, которое я создаю. Когда пользователи начинают новый разговор, я хочу, чтобы «представление чата» появлялось с уже поднятой клавиатурой и курсором в текстовом поле (аналогично большинству существующих чат-приложений). Есть ли способ заставить JSQMessagesViewController появляться с уже поднятой клавиатурой?

Я попытался реализовать это, используя:

self.keyboardController.textView.becomeFirstResponder()

Однако это приводило к тому, что клавиатура сразу появлялась при представлении представления... но панель инструментов отставала примерно на секунду (не слишком сильно, но болезненно заметно). Кроме того, это решение, по-видимому, не позволяет закрывать клавиатуру с помощью жеста вниз, как обычно.

Есть ли что-то, что мне не хватает, что решает это из коробки? Или мне придется изменить библиотеку, чтобы получить эту часть функциональности... и если да, то с чего мне начать это делать?


person SwiftHacker    schedule 13.08.2015    source источник


Ответы (4)


попробуй сделать вот так

-(void)viewWillAppear:(BOOL)animated
{
      [super viewWillAppear:YES];
      [myTextField becomeFirstResponder];
}

--> Это сделает фокус на myTextField и автоматически откроет клавиатуру. Надеюсь, это поможет вам.

person Jecky    schedule 13.08.2015
comment
Спасибо за ваш ответ, но я только что попробовал это, и он страдает от тех же проблем, что и установка .becomeFirstResponder в функцию viewDidLoad -> textField отстает и подавляет удаление клавиатуры с помощью жеста вниз. - person SwiftHacker; 13.08.2015

Это сработало для меня. Это быстро, но должно быть легко перевести.

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(false)

    self.inputToolbar!.contentView!.textView!.becomeFirstResponder()
}
person Robert    schedule 25.09.2015
comment
Это сработало для вас, так как текстовое поле не отстает от всплывающей клавиатуры? Потому что для меня это ведет себя точно так же, как мое решение и решение от Er. Кукадия внизу. - person SwiftHacker; 27.09.2015
comment
Это заставило всплывать вместе вместо текстового поля, появляющегося после клавиатуры. Есть еще небольшая задержка, но они прибывают одновременно. - person Robert; 27.09.2015

Я хотел, чтобы это было нажатием кнопки, поэтому я добавил:

[self.inputToolbar.contentView.textView becomeFirstResponder];

Если вы хотите, чтобы ваш, когда он загружается, добавьте:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [self.inputToolbar.contentView.textView becomeFirstResponder];
}
person Alex Hedley    schedule 02.09.2017

Это может быть слишком поздно, но в моем случае я забыл вызвать super.viewDidAppear(animated), из-за чего текстовое представление отставало от клавиатуры. Как только я добавил этот звонок, проблема исчезла.

person Yury Dorofeev    schedule 16.05.2016
comment
Это был мой ответ на проблему. И я нажал «Добавить еще один ответ». - person Yury Dorofeev; 08.07.2016