У меня есть приложение, в котором в Interface Builder я настраиваюUIView
с текстовым полем в нижней части представления. Когда я запускаю приложение и пытаюсь ввести текст в это поле, клавиатура скользит вверх по полю, поэтому я не вижу, что печатаю, пока снова не скрою клавиатуру.
Кто-нибудь еще сталкивался с этой проблемой и нашел хороший способ решить ее, не делая прокручиваемое родительское представление или не перемещая текстовое поле дальше по экрану?
ios
iphone
keyboard
uitextfield
Cruinh
источник
источник
Ответы:
Обычное решение - сдвинуть поле (и все, что над ним) вверх с анимацией, а затем вернуться вниз, когда вы закончите. Возможно, вам потребуется поместить текстовое поле и некоторые другие элементы в другое представление и сдвинуть представление как единое целое. (Я называю это «плитами», как «тектонические плиты», но это только я). Но вот общая идея, если вам не нужно фантазировать.
источник
Это творило чудеса для меня, сдвигая поля uitext
В частности, он позволяет рассчитывать расстояние анимации слайдов в зависимости от положения текстового поля.
источник
IQKeyboardManager сделает это за вас, БЕЗ СТРОЧКИ КОДА , нужно только перетащить соответствующий исходный файл в проект. IQKeyboardManager также поддерживает ориентацию устройства , автоматическое управление UIToolbar , keyboardDistanceFromTextField и многое другое, чем вы думаете.
Вот блок-схема управления:
Шаг1: - Добавлены глобальные уведомления о
UITextField
,UITextView
иUIKeyboard
в одноплодной классе. Я назвал его IQKeyboardManager .Шаг2: - Если будет установлено
UIKeyboardWillShowNotification
,UITextFieldTextDidBeginEditingNotification
илиUITextViewTextDidBeginEditingNotification
уведомлений, а затем попытаться получитьtopMostViewController
экземпляр изUIWindow.rootViewController
иерархии. Чтобы правильно раскрытьUITextField
/UITextView
на нем,topMostViewController.view
необходимо отрегулировать раму.Шаг 3: - Расчетное ожидаемое расстояние перемещения
topMostViewController.view
относительно первого откликнувшегосяUITextField
/UITextView
.Шаг 4: - Перемещение
topMostViewController.view.frame
вверх / вниз в соответствии с ожидаемым расстоянием перемещения.Шаг 5: - Если обнаружено
UIKeyboardWillHideNotification
,UITextFieldTextDidEndEditingNotification
илиUITextViewTextDidEndEditingNotification
уведомление, то снова попробуйте получитьtopMostViewController
экземпляр изUIWindow.rootViewController
иерархии.Шаг 6: - Расчетное отклоненное расстояние, на
topMostViewController.view
котором необходимо восстановить исходное положение.Шаг 7: - Восстановлено
topMostViewController.view.frame
согласно нарушенному расстоянию.Шаг 8: - Создан экземпляр класса singleton IQKeyboardManager при загрузке приложения, поэтому каждый
UITextField
/UITextView
в приложении будет автоматически настраиваться в соответствии с ожидаемым расстоянием перемещения.Вот и все
источник
Чтобы расширить ответ Amagrammer, вот образец класса:
LoginViewController.h
Обратите внимание, что мы реализуем «UITextFieldDelegate»
LoginViewController.m
источник
UIApplicationDidEnterBackgroundNotification
, иначе он будет двигаться вниз, если вы нажмете кнопку «Домой» и снова войдете в приложение, что сделает его некрасивым и глючным.Как насчет официального решения: перемещение содержимого под клавиатурой?
источник
У меня такая же проблема с
UITableView
ячейками textField. Я решил эту проблему, реализовав следующий метод прослушивания уведомления с клавиатуры.Наблюдатель за уведомлениями здесь:
Обработайте это уведомление с помощью функции ниже:
источник
Проверь это. Никаких хлопот для вас.
Это очень изящное решение. Все, что вам нужно сделать, это добавить свои текстовые поля в
UIScrollView
и изменить его класс наTPKeyboardAvoidingScollView
, если вы используете раскадровки. Вид прокрутки расширен таким образом, что он обнаруживает, когда клавиатура видна, и перемещается над клавиатурой на разумном расстоянии. Это идеальное решение, потому что оно не зависит от вашегоUIViewController
. Все необходимое делается в рамках вышеупомянутого класса. Спасибо Майклу Тайсону и всем остальным.TPKeyboardAvoiding
источник
Ниже представлена быстрая версия ответа Амаграммера. Кроме того, вариант с использованием события UIKeyboardWillShowNotification, поскольку мне нужно было знать размер клавиатуры, прежде чем убирать представление с дороги.
источник
Было отличное пошаговое руководство по редактированию текстовых полей без затемнения (ссылка сейчас мертва, вот обратная ссылка: https://web.archive.org/web/20091123074029/http://acts-as-geek.blogspot.com/2009/ 11 / edit-textfields-without-obscuring.html ). Он показывает, как переместить существующее
UIView
в aUIScrollView
и автоматически прокручивать его при появлении клавиатуры.Я немного обновил его, чтобы рассчитать правильную высоту,
UIScrollView
когда есть элементы управления (например, aUITabBar
) подUIScrollBar
. См. Сообщение об обновлении uiview .источник
Вот решение с использованием Xcode5, iOS7:
Используйте блоки UITextfieldDelegate и animation.
Это почти весь код для ViewController, но я хотел включить код делегата для тех, кто еще несколько незнаком с шаблоном делегата (например, я). Я также включил код, чтобы скрыть клавиатуру, когда вы нажимаете вне текстового представления.
Вы можете перемещать представления (кнопки, текстовые поля и т. Д.) Настолько высоко, насколько хотите, просто не забудьте вернуть их на место (+100, затем -100).
источник
Я предполагаю, что одним из способов было бы переместить всю позицию вашего представления с (x, y) на (x, y-keybaardHeight) при щелчке по текстовому полю и вернуть его, когда клавиатура отклонена, может выглядеть немного странно, поскольку представление просто всплывает (может, неплохо было бы его анимировать).
источник
В дополнение к решению Amagrammer, если вы используете cocos2d в портретном режиме, измените эту строку:
к этому:
Если вы используете cocos2d в ландшафтном режиме, внесите указанные выше изменения и переключите
up
значения вtextFieldDidBeginEditing:
иtextFieldDidEndEditing:
источник
У меня была та же проблема, и GTKeyboardHelper показался мне простым выходом.
После перетаскивания фреймворка в проект включите файл заголовка. Загрузите и откройте пример проекта, затем перетащите объект «Keyboard Helper» из раздела объектов в xib в раздел объектов в построителе интерфейса вашего проекта.
Перетащите все ваши представления, чтобы они были дочерними для «Помощника по клавиатуре».
источник
Фреймворк перетаскивания, который я использую в своих проектах. Поддерживает автоматическое закрытие при нажатии за пределами первого респондента или при прокрутке.
GTKeyboardHelper
источник
Просто сдвиньте вид вверх и вниз по мере необходимости:
Не забудьте установить
self
какUITextFieldDelegate
и как фактическое текстовое полеdelegate
.(Спасибо Ammagrammer, это просто более короткий ответ с использованием блоков для анимации)
источник
У меня есть кое-что еще, если хочешь. Дело в том, что вы хотите установить центр вашего UIView в текстовом поле, которое вы редактируете.
Перед этим вы должны сохранить свой INITIAL_CENTER как CGPoint из self.view.center и ваш INITIAL_VIEW как CGRect из self.view.frame в свойстве const.
Вы можете создать такой метод:
Затем на вашем UITextFieldDelegate вам нужно позвонить в centerOn: (CGRect) следующими методами:
textFieldDidBeginEditing: (UITextField *) с в качестве параметра рамкой текстового поля, в котором вы хотите .
И вы должны вызвать его в своем обработчике событий, где вы закрываете клавиатуру,
textFieldDidEndEditing: (UITextField *) может быть одним из способов сделать это, поместив INITIAL_VIEW в качестве параметра centerOn: (CGRect) .
источник
Я считаю, что в более новых версиях iOS (6.1+, возможно, даже раньше) базовый вид, по крайней мере для UITableView, автоматически сжимается при появлении клавиатуры. Таким образом, вам нужно только сделать текстовое поле видимым в этом представлении. В
init
:затем:
источник
https://github.com/ZulwiyozaPutra/Shift-Keyboard-Example Надеюсь, это решение помогло. Все они написаны на Swift 3.
источник