клавиатура iOS скрывает UITextField - PullRequest
1 голос
/ 11 апреля 2019

Когда я нажимаю на UITextField, который находится в нижней части экрана, он скрыт клавиатурой.То, что я хотел сделать, это продвинуть представление со стандартной анимацией iOS, достигнув UITextField того, в который я вставляю некоторый текст.Я разрабатываю приложение в Swift 5 (Xcode 10.2)

Достигнутый мной результат заключается в том, что теперь я могу перемещать вид (немного раньше, чем хотелось бы), но вид перемещается каждый раз.время, когда я нажимаю UITextField, а не только тот, который будет скрыт клавиатурой.

class ViewController: UIViewController {
    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

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

    @objc func keyboardWillShow(notification: NSNotification) {
        guard let userInfo = notification.userInfo else {
            return
        }

        guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }

        let keyboardFrame = keyboardSize.cgRectValue

        if self.view.frame.origin.y == 0 {
            self.view.frame.origin.y -= keyboardFrame.height
        }
    }

    @objc func keyboardWillHide(notification: NSNotification) {
        guard let userInfo = notification.userInfo else {
            return
        }

        guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }

        let keyboardFrame = keyboardSize.cgRectValue

        if self.view.frame.origin.y != 0 {
            self.view.frame.origin.y += keyboardFrame.height
        }
    }
}

Результат, который я хочу получить, заключается в том, что если пользователь нажимает на UITextField, этозатем, после появления клавиатуры, представление перемещается вверх, пока пользователь не увидит нажатие UITextField.

Я долго искал решение дляэта проблема, но все остальные, которые я видел, кажутся устаревшими или не выполняют то, что я пытаюсь достичь.

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете попробовать с помощью прокрутки:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var scrollView: UIScrollView!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        NotificationCenter.default.addObserver(self,selector:#selector(self.keyboardWillShow),name:UIResponder.keyboardDidShowNotification, object: nil)
        NotificationCenter.default.addObserver(self,selector: #selector(self.keyboardWillHide),name:UIResponder.keyboardDidHideNotification, object: nil)

    }

    @objc func keyboardWillShow(notification: Notification) {

        guard let userInfo = notification.userInfo,

            let frame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
            else{
                return

        }

        let contentInset = UIEdgeInsets(top: 0, left: 0, bottom: frame.height, right: 0)

        scrollView.contentInset = contentInset

    }

    @objc func keyboardWillHide(notification: Notification)

    {
        scrollView.contentInset = UIEdgeInsets.zero
    }

}
...