Подтвердить что ты не робот

Изменить функцию кнопки "Возврат" на "Готово" в swift в UITextView

Я хотел бы избавиться от функции "return" на клавиатуре во время ввода пользователем, поэтому нет новых строк, поэтому вместо этого я бы хотел, чтобы ключ "return" функционировал как "Done", поэтому он скрыть клавиатуру.

Я использую UITextView, который доступен для редактирования, поэтому пользователь может напечатать сообщение и отправить его на основную временную шкалу, но поскольку у меня есть фиксированные ячейки, я не хочу, чтобы пользователь мог нажать 'return', и их сообщение будет вне диапазона временной шкалы.

Я нашел это, что работает с UITextField, но не с UITextView:

func textFieldShouldReturn(textField: UITextField!) -> Bool {
    textField.resignFirstResponder()  //if desired
    return true
}

Итак, я просто хотел знать, есть ли способ сделать это в UITextView или, по крайней мере, чтобы скрыть клавиатуру, если она была нажата, вместо создания новой строки.

4b9b3361

Ответ 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