Отключите клавиатуру с жестом салфетки (как в приложении "Сообщение" )

Когда клавиатура отображается в приложении "Сообщения iPhone", если пользователь начинает прокручивать вниз из таблицы сообщений и переходит в область клавиатуры, клавиатура начнет отклоняться. Если они перемещают палец вверх и вниз во время этого процесса, клавиатура перемещается вместе с ним.

Являются ли Apple это с частными API-интерфейсами или есть способ управлять клавиатурой, подобной этому (я полагаю) распознаватель жестов?

Ответ 1

Я создал категорию UIView, которая обеспечивает требуемую функциональность:

https://github.com/danielamitay/DAKeyboardControl

Изменить: Он действительно использовался в магазине приложений.

Ответ 3

К счастью, Apple добавила удобное свойство keyboardDismissMode на UIScrollView, чтобы сделать вашу жизнь немного легче.

Теперь ваше приложение может вести себя как Message.app, просто изменив одно свойство на вашей раскадровке или, наоборот, добавив одну строку кода!

Это свойство использует новое перечисление UIScrollViewKeyboardDismissMode. Возможные значения этого перечисления следующие:

UIScrollViewKeyboardDismissModeNone        // the keyboard is not dismissed    automatically when scrolling
UIScrollViewKeyboardDismissModeOnDrag      // dismisses the keyboard when a drag begins
UIScrollViewKeyboardDismissModeInteractive // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss

Сохраняет свойство раскадровки, чтобы отклонить клавиатуру на прокрутке:

введите описание изображения здесь

Надеюсь, что поможет решить вашу проблему.

Ответ 5

Вы можете использовать UISwipeGestureRecognizer для этого. Я не знаю, как реализовать его с помощью кода, но если вы используете новую бета-версию xcode 4.2, то это простой способ:

  • Создайте IBAction:

- (IBAction)dismiss:(id)sender;

  • Перейдите к вашему представлению в вашем xib и установите класс для просмотра в UIControl.

  • Перетащите и подключите UISwipeGestureRecognizer из библиотеки к вашему представлению.

  • Подключите IBAction (TouchDown) с помощью UISwipeGestureRecognizer.

  • Введите код, чтобы закрыть клавиатуру:

    - (IBAction)dismiss:(id)sender 
    
    {
    
      [yourTextField resignFirstResponder];
    
    }
    

Готово!

Ответ 6

В быстро вы можете использовать нижеприведенный код, чтобы получить контейнер представления текущей клавиатуры (, если существует), чем вы можете изменить фрейм в коде:

UIApplication.shared.windows
    .filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" }
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" }
    .first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" }
    .first

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

Ответ 7

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

Я собираюсь попробовать, и я дам вам знать, как я иду.

Ответ 8

Короткий ответ; Они, скорее всего, делают некоторые "частные API" там.

Я уверен, что клавиатура находится в независимом представлении, над окном вашего приложения (у вас нет доступа/управления, и он всегда отображается сверху, что бы ни было). Самое большее, что вы можете сделать, это получить представление входа/статуса первого ответчика, и клавиатура появится/исчезнет соответственно: все или ничего.

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