iOS: добавление UITapGestureRecognizer в представление контейнера перехватывает метод didSelectItemAtIndexPath UICollectionView

Я добавил UITapGestureRecognizer к моему основному Content View в моем ViewController, чтобы скрыть клавиатуру при нажатии на представление содержимого.

Проблема в том, что у меня есть UICollectionView внутри моего представления контента, и установка UITapGestureRecognizer перехватывает нажатия моего UICollectionView.

Как мне разрешить касания моего UICollectionView, чтобы метод didSelectItemAtIndexPath срабатывал снова?

func setupGestureRecognizer() {
    let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
    contentView.addGestureRecognizer(dismissKeyboardTap)
}

func dismissKeyboard() {
    contentView.endEditing(true)
}

person The Nomad    schedule 27.12.2014    source источник


Ответы (2)


Чтобы решить эту проблему, добавьте .cancelsTouchesInView = false в свой UITapGestureRecognizer.

Это позволяет проходить касаниям внутри других представлений, например касанию UITableViewCell.

func setupGestureRecognizer() {
    let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
    dismissKeyboardTap.cancelsTouchesInView = false
    contentView.addGestureRecognizer(dismissKeyboardTap)
}

func dismissKeyboard() {
    contentView.endEditing(true)
}
person The Nomad    schedule 31.12.2014
comment
Хм, у меня это не работает на Swift 4.2 iOS 12 :( - person gokeji; 13.11.2018

попробуй это

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}  

и удалите свой tapGesture.

person zangqilong    schedule 27.12.2014
comment
Это останавливает перехват UICollectionView, но не отключает клавиатуру при касании любого места на экране. - person The Nomad; 27.12.2014