Вы можете обработать жест касания, используя UITapGestureRecognizerDelegate
.Это позволяет вам решить, должен ли жест начаться или нет.В вашем случае это должно быть сделано на основе местоположения касания.
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
let location = gestureRecognizer.location(in: self.view)
// return true is location of touch is outside our textField
return !textField.frame.contains(location)
}
}
Просто убедитесь, что вы установили delegate
для своего жеста на viewDidLoad
tapGestureRecogniser.delegate = self
ОБНОВЛЕНИЕ
Если я правильно выполнил настройку, у вас есть представление и некоторые подпредставления, которые используются для ввода.И вы хотите resignFirstResponder
, когда этот super-view
коснулся.В этом случае вы можете использовать gestureRecognizerShouldBegin
вот так
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
let location = gestureRecognizer.location(in: self.view)
for subview in self.view.subviews {
if subview.frame.contains(location) {
return false
}
}
return true
}
По моему мнению, если вы хотите обрабатывать некоторые view
взаимодействия определенным образом, вам нужно сделать это, используя этот конкретный view
,И то, что вы делаете сейчас, похоже на попытку изменить поведение одного view
, используя другого представления.