Скрытие клавиатуры после нажатия клавиши «Готово» - Swift - PullRequest
0 голосов
/ 06 января 2019

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

import UIKit

class FirstPage: UIViewController {

    let emailText: UITextView = {
        let textView = UITextView()
        let attributedText = NSMutableAttributedString(string: "Email", attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20),NSAttributedString.Key.foregroundColor: UIColor.gray])
        textView.backgroundColor = UIColor.clear
        textView.attributedText = attributedText
        textView.translatesAutoresizingMaskIntoConstraints = false
        textView.textAlignment = .center
        textView.returnKeyType = .done
        textView.resignFirstResponder()
        textView.isScrollEnabled = false
        return textView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        emailText.delegate = self as? UITextViewDelegate
        view.addSubview(emailText)
        emailText.translatesAutoresizingMaskIntoConstraints = false
        emailText.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    }

}

1 Ответ

0 голосов
/ 06 января 2019

Что касается ваших комментариев, я считаю, что у вас есть метод делегата для отклонения клавиатуры.

Первая проблема, которую я вижу, это то, что вы просматриваете контроллер, не реализующий протокол делегирования текстового представления, измените его: Class: Protocol

extension FirstPage: UITextViewDelegate {
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if text == "\n" {
            textView.resignFirstResponder()
            return false
        }
        return true
    }
}

затем установите делегат вашего текстового представления так же, как self

emailText.delegate = self

Также сделайте вашу текстовую переменную представления lazy (также вы можете назначить ее делегат внутри ленивой переменной инициализации)

lazy var emailText: UITextView = {
    let textView = UITextView()
    ...
    textView.delegate = self
    return textView
}()

Теперь давайте подумаем о контенте. У вас есть UITextView для вставки email . Поскольку для вставки электронной почты достаточно одной строки текста, используйте UITextField вместо своего текстового представления.

Затем вы можете использовать textFieldShouldReturn метод делегата текстового поля для отмены клавиатуры после нажатия клавиша возврата

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...