Ответ 1
Я создал категорию UIView, которая обеспечивает требуемую функциональность:
https://github.com/danielamitay/DAKeyboardControl
Изменить: Он действительно использовался в магазине приложений.
Когда клавиатура отображается в приложении "Сообщения iPhone", если пользователь начинает прокручивать вниз из таблицы сообщений и переходит в область клавиатуры, клавиатура начнет отклоняться. Если они перемещают палец вверх и вниз во время этого процесса, клавиатура перемещается вместе с ним.
Являются ли Apple это с частными API-интерфейсами или есть способ управлять клавиатурой, подобной этому (я полагаю) распознаватель жестов?
Я создал категорию UIView, которая обеспечивает требуемую функциональность:
https://github.com/danielamitay/DAKeyboardControl
Изменить: Он действительно использовался в магазине приложений.
Самое простое решение - установить следующие два свойства:
Бум, детка!
Отъезд Acani Chats Клиент iPhone ChatViewController.swift
для примера.
К счастью, 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
Сохраняет свойство раскадровки, чтобы отклонить клавиатуру на прокрутке:
Надеюсь, что поможет решить вашу проблему.
В iOS 7 теперь вы можете отключить клавиатуру в интерактивном режиме на UIScrollView.
Отключение клавиатуры в UIScrollView
Надеюсь, что это поможет кому-то.
Вы можете использовать UISwipeGestureRecognizer для этого. Я не знаю, как реализовать его с помощью кода, но если вы используете новую бета-версию xcode 4.2, то это простой способ:
- (IBAction)dismiss:(id)sender;
Перейдите к вашему представлению в вашем xib и установите класс для просмотра в UIControl.
Перетащите и подключите UISwipeGestureRecognizer из библиотеки к вашему представлению.
Подключите IBAction (TouchDown) с помощью UISwipeGestureRecognizer.
Введите код, чтобы закрыть клавиатуру:
- (IBAction)dismiss:(id)sender
{
[yourTextField resignFirstResponder];
}
Готово!
В быстро вы можете использовать нижеприведенный код, чтобы получить контейнер представления текущей клавиатуры (, если существует), чем вы можете изменить фрейм в коде:
UIApplication.shared.windows
.filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" }
.first
Кстати, это инструмент под названием Reveal, чтобы вы могли видеть иерархию представления.
Я думаю, что лучший способ - разместить скрытую кнопку над контейнером ввода текста. длинную полосу и когда он обнаруживает приземление и отпускает или отменяет, а затем скрывает клавиатуру.
Я собираюсь попробовать, и я дам вам знать, как я иду.
Короткий ответ; Они, скорее всего, делают некоторые "частные API" там.
Я уверен, что клавиатура находится в независимом представлении, над окном вашего приложения (у вас нет доступа/управления, и он всегда отображается сверху, что бы ни было). Самое большее, что вы можете сделать, это получить представление входа/статуса первого ответчика, и клавиатура появится/исчезнет соответственно: все или ничего.
Возможно, вы сможете получить представление о клавиатуре и изменить его свойство фрейма (используя недокументированные свойства документированных классов и недокументированные классы), но я уверен, что вас вышвырнут из магазина.