В библиотеке IB введение говорит нам, что при returnнажатии клавиши клавиатура для UITextView
исчезнет. Но на самом деле returnключ может действовать только как \ n.
Я могу добавить кнопку и использовать, [txtView resignFirstResponder]
чтобы скрыть клавиатуру.
Но есть ли способ добавить действие для returnклавиши на клавиатуре, чтобы мне не нужно было добавлять UIButton
?
iphone
objective-c
keyboard
uitextview
iphone-softkeyboard
Холодный чжун
источник
источник
Ответы:
UITextView
не имеет методов, которые будут вызываться, когда пользователь нажимает клавишу возврата. Если вы хотите, чтобы пользователь мог добавить только одну строку текста, используйтеUITextField
. Нажатие клавиши возврата и скрытие клавиатурыUITextView
не соответствует рекомендациям интерфейса.Даже тогда, если вы хотите сделать это, реализуйте
textView:shouldChangeTextInRange:replacementText:
методUITextViewDelegate
и в этой проверке, если текст замены\n
, скрыть клавиатуру.Могут быть и другие способы, но я не знаю ни одного.
источник
[textField setReturnKeyType: UIReturnKeyDone];
или используя построитель интерфейсаЯ подумал, что вместо этого выложу фрагмент:
Убедитесь, что вы объявили о поддержке
UITextViewDelegate
протокола.Обновление Swift 4.0:
источник
Я знаю, что на этот вопрос уже дан ответ, но мне не очень нравится использовать строковый литерал для новой строки, так что вот что я сделал.
Обновление Swift 4.0:
источник
NSString *replacedText = [textView.text stringByReplacingCharactersInRange:range withString:text]
.Я знаю, что на это отвечали много раз, но вот мои два цента на проблему.
Я нашел ответы samvermette и ribeto очень полезными, а также комментарий maxpower в ответе ribeto . Но есть проблема с этими подходами. Проблема, матовое упоминает в samvermette «s ответ , и это то , что если пользователь хочет , чтобы вставить что - то с разрывом строки внутри него, клавиатура пряталась без вставки ничего.
Таким образом, мой подход представляет собой смесь трех вышеупомянутых решений и проверяет, является ли введенная строка новой строкой, когда длина строки равна 1, поэтому мы проверяем, что пользователь печатает вместо вставки.
Вот что я сделал:
источник
Более элегантный способ - убрать клавиатуру, когда пользователь нажимает где-то за рамкой клавиатуры.
Сначала установите представление ViewController для класса «UIControl» в инспекторе идентичности в UIBuilder. Удерживая клавишу «Control», перетащите представление в файл заголовка ViewController и свяжите его как действие с событием «Touch Up Inside», например:
ViewController.h
В основном файле ViewController ViewController.m:
Вы можете требовать двойного касания или длительного касания, используя аналогичные приемы. Возможно, вам понадобится установить ваш ViewController как UITextViewDelegate и подключить TextView к ViewController. Этот метод работает как для UITextView, так и для UITextField.
Источник: Ранчо Большого Ботаника
РЕДАКТИРОВАТЬ: Я также хотел бы добавить, что если вы используете UIScrollView, вышеупомянутая техника может работать не так легко через Interface Builder. В этом случае вы можете использовать UIGestureRecognizer и вызвать вместо него метод [[self view] endEditing: YES] внутри него. Примером может быть:
Когда пользователь нажимает за пределами клавиатуры и не нажимает пробел, клавиатура отклоняется.
источник
GestureRecognizer
но огромная проблема заключается в том, что все кнопки или элемент управления в представлении больше не активируются.Добавьте этот метод в свой контроллер представления.
Свифт :
Этот метод также может быть полезен для вас:
источник
super.touchesBegan(touches:withEvent:)
.else { return true }
.Также добавьте
UITextViewDelegate
Не забудьте подтвердить протокол
Если вы не добавили,
if([text isEqualToString:@"\n"])
вы не можете редактироватьисточник
NO
если текст равен@"\n"
.Существует другое решение при использовании с uitextview. Вы можете добавить панель инструментов как InputAccessoryView в «textViewShouldBeginEditing», и с помощью кнопки «Готово» на этой панели инструментов вы можете отклонить клавиатуру, код для этого следующий:
источник
Я нашел ответ Джозебамы самым полным и чистым ответом, доступным в этой теме.
Ниже приведен синтаксис Swift 4 для него:
источник
resultRange
состоит в том, чтобы проверить, содержит ли текст только новые строки, которые избегают жесткого кода "\ n".быстрый
источник
Использование контроллера навигации для размещения панели для отклонения клавиатуры:
в .h файле:
в .m файле:
источник
Как и матовый комментарий к samvermette, мне также не нравится идея обнаружения "\ n". Клавиша «возврата» существует по причине в UITextView, то есть, конечно, для перехода к следующей строке.
Лучшее решение, на мой взгляд, состоит в том, чтобы имитировать приложение для сообщений iPhone - добавить панель инструментов (и кнопку) на клавиатуре.
Я получил код из следующего сообщения в блоге:
http://www.iosdevnotes.com/2011/02/iphone-keyboard-toolbar/
шаги:
-Добавить панель инструментов в ваш файл XIB - установите высоту 460
-Добавить элемент кнопки панели инструментов (если еще не добавлен). Если вам нужно выровнять его по правому краю, также добавьте элемент кнопки гибкой панели в XIB и переместите элемент кнопки панели инструментов
-Создайте действие, которое связывает ваш элемент кнопки с resignFirstResponder следующим образом:
-Затем:
источник
Просто решил эту проблему по-другому.
Контролем перетащите кнопку в
viewController.h
файл и создайте действие (Отправленное событие: Touch Up Inside), например:В
ViewController.m
должен выглядеть так:источник
Добавить наблюдателя в viewDidLoad
а затем используйте селектор, чтобы проверить «\ n»
Он использует «\ n» и не проверяет ключ возврата, но я думаю, что это нормально.
ОБНОВИТЬ
Смотрите ответ Рибто ниже, который использует
[NSCharacterSet newlineCharacterSet]
вместо\n
источник
\n
и ключ возврата обнаруживается на основе,\n
поэтому он проверяет наличие ключа возврата. Разница лишь в том, что вы используете уведомления, а не textViewDelegates.[NSCharacterSet newlineCharacterSet]
вместо \ n может быть лучшим способом.Swift Code
Реализуйте UITextViewDelegate в своем классе / Смотрите так:
установите делегата textView на себя
А затем реализовать следующее:
РЕДАКТИРОВАТЬ Я обновил код, потому что это никогда не хорошая идея, чтобы изменить пользовательский ввод в текстовом поле для обходного пути и не сбрасывать состояние после завершения кода взлома.
источник
Попробуй это :
источник
// Вы можете использовать это ...
Шаг 1. Первый шаг - убедиться, что вы заявили о поддержке
UITextViewDelegate
протокола. Это делается в вашем заголовочном файле, в качестве примера можно привести заголовокEditorController.h:
Шаг 2. Далее вам нужно зарегистрировать контроллер в качестве делегата UITextView. Продолжая из приведенного выше примера, вот как я инициализировал
UITextView
сEditorController
делегатом…Шаг 3. И теперь последняя часть головоломки - принять меры в ответ на
shouldCahngeTextInRange
сообщение следующим образом:источник
Вы также можете скрыть клавиатуру при касании на экране просмотра:
источник
Быстрый ответ:
источник
Я использовал этот код для смены респондента.
источник
Вопрос состоит в том, как сделать это с помощью клавиши возврата, но я думаю, что это может помочь кому-то с намерением просто заставить клавиатуру исчезнуть при использовании UITextView:
Вызовите addToolBarForTextView () в viewDidLoad или другом методе жизненного цикла.
Кажется, это было идеальное решение для меня.
Ура,
Мурат
источник
Хорошо. Все дали ответы с хитростями, но я думаю, что правильный путь для достижения этой цели -
Подключение следующего действия к событию « Закончено ли при выходе » в
Interface Builder
. (щелкните правой кнопкой мышиTextField
и перетащите cntrl из пункта « Закончилось ли при выходе ») следующим способом.источник
Подобно другим ответам, использующим,
UITextViewDelegate
но более новый быстрый интерфейсisNewline
:источник
источник
источник
Я знаю, что это не точный ответ на этот вопрос, но я нашел эту ветку после поиска в интернете ответа. Я предполагаю, что другие разделяют это чувство.
Это моя разница в UITapGestureRecognizer, который я считаю надежным и простым в использовании - просто установите делегат TextView на ViewController.
Вместо ViewDidLoad я добавляю UITapGestureRecognizer, когда TextView становится активным для редактирования:
Когда я нажимаю вне TextView, представление завершает режим редактирования, и UITapGestureRecognizer удаляет себя, чтобы я мог продолжить взаимодействие с другими элементами управления в представлении.
Надеюсь, это поможет. Это кажется таким очевидным, но я никогда не видел такого решения в Интернете - я что-то не так делаю?
источник
Не забудьте установить делегат для textView - иначе resignfirstresponder не будет работать.
источник
Попробуй это .
источник
Для Xcode 6.4., Swift 1.2. :
источник
Вы должны добавить
UIToolbar
к верху UITextView, чтобы сделать проще, чем использоватьshouldChangeTextIn
В Swift 4
источник
toolbar.sizeToFit()