Вопросы с интерактивнымPopGestureRecognizer при отображении клавиатуры

Это скриншот

В представлении B, когда отображается клавиатура и выдвигается viewController для просмотра A с помощью интерактивногоPopGestureRecognizer, клавиатура по-прежнему остается здесь :(

Как заставить клавиатуру двигаться с видом B? (например, iMessage или Facebook Messenger)

ps: я пытаюсь получить вид с клавиатуры и добавить в self.view, это полезно, но я думаю, что это не очень хороший способ.

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShown)
                                             name:UIKeyboardDidShowNotification object:nil];

а также

- (void)keyboardDidShown
{
    UIView * keyboardView = self.textView.inputAccessoryView.superview;
    [self.view addSubview: keyboardView];
}

person kamikuo    schedule 03.12.2013    source источник


Ответы (2)


Попробуйте это решение:

https://github.com/cotap/TAPKeyboardPop

Это легкая категория, которая слушает interactivePopGestureRecognizer жесты и соответственно анимирует клавиатуру.

person m8labs    schedule 06.06.2014

Вы не добавляете keybordView в представление. Если вы хотите отобразить клавиатуру для своего UITextField/UITextView, вы вызываете для этого объекта метод beFirstResponder. В вашем примере это должно быть:

[self.textView becomeFirstResponder];

Если вы хотите скрыть клавиатуру, вы звоните:

[self.textView  resignFirstResponder];

И если вы хотите скрыть свою клавиатуру, прежде чем закрыть ViewA, вы должны вызвать ее в начале вашего интерактивногоPopGestureRecognizer, когда вы запускаете анимацию для отображения ViewB. Надеюсь, это поможет.

//РАСШИРЕННЫЙ

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

- (void)keyboardDidShown
{
    UIView * keyboardView = self.textView.inputAccessoryView.superview;
    [self.view addSubview: keyboardView];
}

И я не понимаю, почему вы используете центр уведомлений. Функциональность, при которой клавиатура остается, когда вы закрываете представление (как приложение iMessage), является стандартной функциональностью. Просто используйте

[self.textView becomeFirstResponder];

когда хочешь показать клавиатуру и не звонить

[self.textView  resignFirstResponder];

когда вы открываете свой контроллер представления. iOS сделает всю работу за вас.

person Greg    schedule 03.12.2013
comment
Извините, может быть, я не ясно выразился. Я знаю, как показать/скрыть клавиатуру, и после теста я обнаружил, что он автоматически отправит UIKeyboardWillHideNotification, когда ViewA появится в ViewB, но клавиатура не спряталась - person kamikuo; 03.12.2013
comment
Я думаю, что это может произойти, потому что вы добавляете keyboardView в качестве подвида к вашему представлению. Попробуйте заменить его на [self.textView beFirstResponder]; - person Greg; 03.12.2013
comment
Нет, добавить keyboardView в self.view — это попытка, а не причина - person kamikuo; 03.12.2013
comment
После отображения клавиатуры и textField/textView есть inputAccessoryView, textView.inputAccessoryView.superview будет клавиатуройView, поэтому добавьте его в мое представление. - person kamikuo; 03.12.2013
comment
Спасибо за ваше терпение :) Я делаю скриншот, надеюсь, он сможет передать мой вопрос. lh4.googleusercontent.com/-vpAzSRkfy9A/Up3LBG1ICYI/AAAAAAAAALM/ - person kamikuo; 03.12.2013
comment
Хорошо, теперь я понял вашу точку зрения. Могу я спросить, почему вы пытаетесь это сделать? В вашем ViewB клавиатура подключена к текстовому полю, но если вы переместите ее в ViewA, клавиатура будет бесполезна. - person Greg; 03.12.2013
comment
Ой! Я не хочу этого делать. Я надеюсь, что смогу сделать то же самое с iMessage, но я не могу, я всегда получаю результаты на правильном снимке экрана. - person kamikuo; 03.12.2013
comment
Вместо того, чтобы добавлять клавиатуру в self.view, попробуйте добавить ее в superview. - person Greg; 03.12.2013