Swift: Как показать клавиатуру с дополнительным представлением, содержащим текстовое поле, которое становится первым респондентом? - PullRequest
0 голосов
/ 17 января 2019

Я разрабатываю приложение для iOS, в котором, когда пользователь нажимает на кнопку, вызывается функция, которая показывает клавиатуру (изначально без текстового поля или текстового поля. Изначально отображается только клавиатура). Клавиатура также содержит текстовое поле или текстовое поле в дополнительном представлении ввода. Когда текстовое представление или текстовое поле касается, текстовое представление становится первым респондентом. Это было бы очень похоже на то, как работает приложение «Сообщения» на iPhone, за исключением того, что текстовое поле / представление содержится в дополнительном представлении той же клавиатуры и ранее не было видно. Я изо всех сил пытаюсь представить, как это возможно - кто-нибудь может помочь?

1 Ответ

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

Я не уверен на 100%, чего вы хотите достичь.Этот код откроет клавиатуру при нажатии кнопки и покажет textField только тогда, когда пользователь начинает печатать.

Когда кнопка нажата, мы устанавливаем для ответчика скрытого textField значение true.Таким образом, мы поднимаем клавиатуру, не показывая textField.Когда пользователь начинает печатать, мы раскрываем текстовое поле и изменяем его ограничения, чтобы они были над клавиатурой.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textFieldBottomConstraint: NSLayoutConstraint!

    var keyboardHeight: CGFloat = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
        textField.isHidden = true
        textField.delegate = self

        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillShow),
            name: UIResponder.keyboardWillShowNotification,
            object: nil
        )
    }

    @objc func buttonPressed() {
        textField.becomeFirstResponder()
    }

    @objc func keyboardWillShow(_ notification: Notification) {
        if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
            let keyboardHeight = keyboardFrame.cgRectValue.height
            self.keyboardHeight = keyboardHeight
        }
    }
}

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        textField.isHidden = false
        textFieldBottomConstraint.constant = keyboardHeight
        return true
    }
}
...