Изменить функцию кнопки "Возврат" на "Готово" в swift в UITextView
Я хотел бы избавиться от функции "return" на клавиатуре во время ввода пользователем, поэтому нет новых строк, поэтому вместо этого я бы хотел, чтобы ключ "return" функционировал как "Done", поэтому он скрыть клавиатуру.
Я использую UITextView, который доступен для редактирования, поэтому пользователь может напечатать сообщение и отправить его на основную временную шкалу, но поскольку у меня есть фиксированные ячейки, я не хочу, чтобы пользователь мог нажать 'return', и их сообщение будет вне диапазона временной шкалы.
Я нашел это, что работает с UITextField, но не с UITextView:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder() //if desired
return true
}
Итак, я просто хотел знать, есть ли способ сделать это в UITextView или, по крайней мере, чтобы скрыть клавиатуру, если она была нажата, вместо создания новой строки.
Ответы
Ответ 1
Вы можете установить тип возвращаемого ключа текстового поля:
textField.returnKeyType = UIReturnKeyType.Done
Обновление
Вы можете определенно использовать тот же подход, чтобы установить ключ возврата в "Готово", как упоминалось выше. Однако UITextView не обеспечивает обратный вызов, когда пользователь обращается к ключу возврата. В качестве обходного пути вы можете попытаться обработать команду textView (textView: UITextView, shouldChangeTextInRange: NSRange, replaceText text: String) и отклонить клавиатуру, когда вы обнаруживаете ввод нового символа линии:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
Ответ 2
Я перепробовал много кодов, и, наконец, это сработало для меня в Swift 3.0 Latest [April 2019], это достигнуто с помощью UITextFields
Класс "ViewController" должен быть унаследован от "UITextFieldDelegate", чтобы этот код работал.
class ViewController: UIViewController,UITextFieldDelegate
Добавьте текстовое поле с соответствующим номером тега, и этот номер тега используется для переноса элемента управления в соответствующее текстовое поле на основе присвоенного ему добавочного номера тега.
override func viewDidLoad() {
userNameTextField.delegate = self
userNameTextField.tag = 0
userNameTextField.returnKeyType = .next
passwordTextField.delegate = self
passwordTextField.tag = 1
passwordTextField.returnKeyType = .go
}
В приведенном выше коде returnKeyType = UIReturnKeyType.next, где клавиша возврата клавиатуры будет отображаться как "Далее", у вас также есть другие опции, такие как "Join/Go" и т.д., В зависимости от того, что ваше приложение изменяет значения.
Этот "textFieldShouldReturn" является методом управляемого UITextFieldDelegate, и здесь у нас есть следующий выбор поля, основанный на увеличении значения тега.
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
return true;
}
return false
}
Ответ 3
Работа в Swift 4
Добавьте это в viewDidLoad().
textField.returnKeyType = UIReturnKeyType.Done
Добавьте это где угодно.
extension UITextView: UITextViewDelegate {
public func textViewDidChange(_ textView: UITextView) {
if text.last == "\n" { //Check if last char is newline
text.removeLast() //Remove newline
textView.resignFirstResponder() //Dismiss keyboard
}
}
}
Ответ 4
Если вы работаете с раскадровкой или XIB, вы можете изменить UITextView's
возврата в UITextView's
на "Готово" (или другие опции) в Интерфейсном Разработчике без необходимости в каком-либо коде установки. Просто найдите эту опцию в инспекторе Атрибутов:
![Return Key option in Interface Builder]()
Оттуда вы просто UITextViewDelegate
его с кодом UITextViewDelegate
который другие уже предоставили здесь.
Swift v5:
extension ExampleViewController: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
}
А затем, в вашем viewDidLoad()
:
exampleTextView.delegate = self