UIGestureRecognizer получает прикосновение, но также перенаправляет его в UIControl

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

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

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

Вариант 1: вид B (красный) имеет обычный UIButton в качестве подвида. Вариант 2. Вид A (синий) имеет обычный UIButton в качестве подвида.

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

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

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

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


person Till    schedule 30.05.2011    source источник
comment
+1 за такой тщательно продуманный вопрос :)   -  person Nick Weaver    schedule 16.06.2011


Ответы (1)


Пробовали ли вы использовать это?

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

@property(nonatomic) BOOL cancelsTouchesInView
person sergio    schedule 30.05.2011
comment
Я пробовал это с обоими вариантами 1 и 2, и использование этого свойства не имело никакого значения; в обоих случаях только кнопка или только вид получали прикосновения к этой области кнопки. - person Till; 30.05.2011
comment
Упс, я на самом деле попробовал другой вариант, когда пытался заставить работать cancelsTouchesInView. Моя кнопка была родственной для представлений A и B, поэтому свойство не имело никакого эффекта. При использовании варианта 1, как описано в моем вопросе, это свойство работает точно так, как описано. Любое прикосновение к этой кнопке вызывает прикосновение к кнопке внутри, а также распознавание жестов касания в супервизоре этой кнопки. На самом деле это не решает весь мой квест (распознавание прикосновения также к этому другому виду), но делает меня на большой шаг ближе к цели - следовательно, +1 - ty. - person Till; 31.05.2011
comment
пример кода, в моем случае '-(IBAction)handleHoldOnPlay:(UIGestureRecognizer*)sender { 'sender.cancelsTouchesInView = NO;...' (спасибо, серджио) - person tmr; 14.01.2015