Я пытаюсь использовать вместе MDCTextField и табличное представление. MDCTextField
фильтрует табличное представление, затем пользователь должен нажать на ячейку, и клавиатура должна исчезнуть, а табличное представление должно быть скрыто. Проблема заключается в том, что клавиатура закрывается, а табличное представление скрывается до того, как табличное представление регистрирует нажатие на ячейку. Как я могу зарегистрировать, что ячейка была нажата до того, как MDCTextField
зарегистрирует нажатие?
Как удалить действие «отклонить клавиатуру» при касании за пределами MDCTextField
Ответы (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.