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

Я знаю, что контроллер представления должен быть firstResponder, чтобы inputAccessory оставался внизу. Я использую настраиваемый inputView / keyboard. Я могу вручную отклонить его с помощью кнопки «Готово», удалив inputView, но не отказавшись от первого респондента. Однако, когда я включаю интерактивное перетаскивание для отклонения в моем просмотре прокрутки, код автоматически увольняет первого респондента. Итак, как я могу использовать интерактивное перетаскивание, чтобы отклонить, оставив при этом свой контроллер просмотра в качестве первого респондента? Кто-нибудь делал это раньше? Я подумал, что, может быть, это невозможно, и что мне, возможно, придется сделать свое собственное интерактивное перетаскивание, чтобы отклонить его с помощью распознавателя жестов.

Дополнительная информация: у меня есть кнопка, которая переключает стандартную клавиатуру на пользовательскую. Я видел, как отклонил эти причины 2, клавиатура отклоняла уведомления. Я думал, что могу стать firstResponder в методе keyboardDidHide, но это не сработало, так как я не мог отличить, когда я вручную закрыл клавиатуру, и когда это делает интерактивное перетаскивание. Это важно, потому что мне не нужно перезагружать представление ввода или становиться первым респондентом, когда я вручную увольняю, потому что я уже позаботился об этом.

Любые предложения были бы потрясающими. Я пытаюсь использовать inputView и inputAccessoryView на уровне UIViewController.


person Alex Reynolds    schedule 25.02.2016    source источник


Ответы (2)


Что ж, после дня, когда я тянул за волосы, у меня есть ответ.

Использование canResignFirstResponder моего viewcontroller помогло. В viewWillAppear я установил BOOL responderOverride = YES;

В viewWillDisappear я звоню

responderOverride = NO; [self resignFirstResponder];

Когда интерактивное перетаскивание на scrollview пытается resignFirstResponder, canResignFirstResponder возвращает no, что не позволяет моему viewcontroller уйти в отставку и сохраняет мой входной аксессуар сохраненным и сидящим в нижней части экрана.

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

person Alex Reynolds    schedule 02.03.2016

override var canBecomeFirstResponder : Bool {
     get {
           retrun true
      }
}

Это работает для меня

person Dane    schedule 26.07.2019