Как переместить таблицу вверх, когда какое-то конкретное текстовое поле скрыто клавиатурой? - PullRequest
0 голосов
/ 03 августа 2020

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

override func viewWillAppear(_ animated: Bool) {
        NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillChange(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillChange(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
    }

   @objc func keyBoardWillChange(notification : Notification)
    {
        print("Keyboard will show :\(notification.name.rawValue)")
        let cell = deliveryTableView.cellForRow(at: IndexPath.init(row: 8, section: 0))
        
        view.frame.origin.y = -175
    }/*
    @objc func KeyBoardWillHide(notification : Notification)
    {
        UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIView.KeyframeAnimationOptions.allowUserInteraction, animations: {
            self.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
        }, completion: nil)
    }*/
    deinit {
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidShowNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
    }

Но проблема в том, что tableview сдвигается вверх даже при нажатии на самое первое текстовое поле, что выглядит не очень хорошо. Но я хочу, чтобы tableview сдвигался вверх только при наличии текстового поля внизу.

1 Ответ

1 голос
/ 03 августа 2020

Используйте IQKeyboardManager с одной строкой кода в appdelegate. Он позаботится о клавиатуре.

шаг 1) Добавьте модуль IQKeyboardManager в модуль pod- и запустите pod install

шаг 2) Включите IQKeyboardManager, написав этот фрагмент кода в методе didFinishLaunchingWithOptions метода appdelegate

IQKeyboardManager.shared.enable = true

Ссылка: https://github.com/hackiftekhar/IQKeyboardManager

...