Как удалить действие «отклонить клавиатуру» при касании за пределами MDCTextField

Я пытаюсь использовать вместе MDCTextField и табличное представление. MDCTextField фильтрует табличное представление, затем пользователь должен нажать на ячейку, и клавиатура должна исчезнуть, а табличное представление должно быть скрыто. Проблема заключается в том, что клавиатура закрывается, а табличное представление скрывается до того, как табличное представление регистрирует нажатие на ячейку. Как я могу зарегистрировать, что ячейка была нажата до того, как MDCTextField зарегистрирует нажатие?


person jimmyruby    schedule 10.08.2018    source источник


Ответы (1)


Я использую это расширение, которое вы можете поместить в файл helpers.swift, но таким образом вы можете использовать его на любом UIViewController.

extension UIViewController {
        func hideKeyboardWhenTappedAround() {
            let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
            tap.cancelsTouchesInView = false
            view.addGestureRecognizer(tap)
        }

        @objc func dismissKeyboard() {
            view.endEditing(true)
        }
    }

Чтобы использовать его, в viewDidLoad() просто добавьте этот self.hideKeyboardWhenTappedAround()

ИЗМЕНИТЬ На основании комментария

Теоретически следующий код должен помочь, но у меня не было времени проверить его, я читал, что люди не могли заставить функцию touchBegan запускаться, но я также не знаю другого способа сделать то, что вы хотите.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let position = touch.location(in: view)
        if let ip = tableView.indexPathForRow(at: position) {
            let cell = tableView.cellForRow(at: ip)
            print(cell.text)
        }
    }
}

Теория следующая

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

В примере, который я вам дал, я печатаю текст ячейки, но вы можете выполнять любую другую операцию, которую хотите.

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

person Pedro Cavaleiro    schedule 10.08.2018
comment
Я не думаю, что вы поняли вопрос. Клавиатура исчезает до того, как будет выбрана ячейка табличного представления. Я пытаюсь сначала зарегистрировать касание таблицы. Вы знаете, как это сделать? - person jimmyruby; 10.08.2018
comment
@jimmyruby Я неправильно понял ваш вопрос, я думаю, что обновление соответствует вашим потребностям. Однако я оставлю предыдущую часть, если она может помочь другим пользователям. - person Pedro Cavaleiro; 11.08.2018