UIGestureRecognizer получает прикосновение, но также передает его в UIControl - PullRequest
35 голосов
/ 30 мая 2011

Как бы вы позволили UIGestureRecognizer из UIView получить событие касания, но также убедиться, что другой, лежащий / накладывающийся UIView также получит то же самое событие касания?

Допустим, у меня есть следующее представление-иерархия: view hierachie scribble

Представления A (синий) и B (красный) являются подпредставлениями одного и того же суперпредставления (серый). Другими словами, они оба являются братьями и сестрами, и порядок решает, какой из них охватывает другого.

Вариант 1: Представление B (красное) имеет регулярное UIButton в качестве своего подпредставления. Вариант 2: Представление A (синее) имеет регулярное UIButton в качестве своего подпредставления.

Дан Вариант 1 ради пояснений: Представление A (синее) имеет UITapGestureRecognizer (или, может быть, даже больше, другие UIGestureRecognizer). Какой был бы самый элегантный подход, чтобы убедиться, что UIButton получает все касания в своей области, но также и представление A (синее) получает эти касания в UITapGestureRecognizer?

Если это возможно любым способом, решение не должно включать расширение класса UIButton и ручную пересылку любых событий с самой кнопки. Представьте себе, что представление B будет содержать гораздо больше элементов управления, а не просто кнопку. Все эти элементы управления должны как-то позволять представлению А получать прикосновения к UIGestureRecognizer.

Я предоставил два варианта, так как мне все равно, какой из этих видов (A или B) будет первым, если оба получат прикосновения.

Все мои подходы так внезапно зашли в тупик. Может быть, цепочка респондента была бы хорошим решением? Я продолжаю думать, что должно быть элегантное решение во всем стеке UIKit / UIEvent / UIResponder.

1 Ответ

19 голосов
/ 30 мая 2011

Вы пробовали с этим ?

cancelsTouchesInView Логическое значение, влияющее на то, передаются ли касания представлению при распознавании жеста.

@property(nonatomic) BOOL cancelsTouchesInView
...