it-roy-ru.com

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

Я хотел бы избавиться от функции «возврата» клавиатуры, когда пользователь печатает, чтобы не было новых строк, поэтому вместо этого я бы хотел, чтобы клавиша «возврата» функционировала как «Готово», чтобы скрыть клавиатуру. ,.

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

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

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

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

27
Bruno Recillas

Вы можете установить тип ключа возврата текстового поля:

textField.returnKeyType = UIReturnKeyType.Done

Обновление Вы можете определенно использовать тот же подход, чтобы установить ключ возврата на «Готово», как упомянуто выше. Однако UITextView не обеспечивает обратный вызов, когда пользователь нажимает клавишу возврата. В качестве обходного пути вы можете попытаться обработать вызов делегата textView (textView: UITextView, shouldChangeTextInRange range: NSRange, replaceText text: String) и отклонить клавиатуру при обнаружении ввода символа новой строки:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if (text == "\n") {
        textView.resignFirstResponder()
    }
    return true
}
76
utogaria

Я перепробовал много кодов, и, наконец, это сработало для меня в Swift 3.0 Latest [March 2017], это достигнуто с помощью 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
BHUVANESH MOHANKUMAR

Работа в 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
        }
    }
}
0
Erik Nguyen