Отключить клавиатуру с помощью жеста (как в приложении «Сообщение») - PullRequest
30 голосов
/ 20 августа 2011

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

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

Ответы [ 8 ]

44 голосов
/ 20 февраля 2012

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

https://github.com/danielamitay/DAKeyboardControl

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

31 голосов
/ 23 июня 2014

Самое простое решение - установить следующие два свойства:

Бум, детка!

Оформить Acani Чаты iPhone Client ChatViewController.swiftпример.

25 голосов
/ 23 января 2016

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

Теперь ваше приложение может вести себя как Messages.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

Вот свойство Storyboard, которое можно изменить, чтобы отклонить клавиатуру при прокрутке:

enter image description here

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

10 голосов
/ 29 ноября 2013

В iOS 7 теперь вы можете отключить клавиатуру в интерактивном режиме в UIScrollView.

Отклонение клавиатуры в UIScrollView

Надеюсь, что это кому-нибудь поможет.

5 голосов
/ 20 августа 2011

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

  1. Создать IBAction:

- (IBAction)dismiss:(id)sender;

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

  2. Перетащите и подключите UISwipeGestureRecognizer изБиблиотека на ваш взгляд.

  3. Соедините IBAction (TouchDown) с UISwipeGestureRecognizer.

  4. Введите код для отклонения клавиатуры:

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

Готово!

2 голосов
/ 20 апреля 2017

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

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

Кстати, вот инструмент под названием Показать , позволяющий просматривать иерархическое представление.

0 голосов
/ 29 сентября 2011

краткий ответ; Скорее всего, они там делают что-то вроде «частного API».

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

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

0 голосов
/ 29 сентября 2011

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

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

...