iOS5 UITapRecognizer для UIScrollView, мешающего кнопкам. Как исправить?

У меня есть UIButton в UIView в UIScrollView . Я пытаюсь добавить распознаватель кран в список прокрутки. Вызов распознавателя крана, но теперь ни одна из моих кнопок не работает.

Я знаю, что в iOS5 UIScrollView может каким-то образом передать событие касания вниз до иерархии управления после выполнения с ним. Кто-нибудь может помочь мне выяснить, как это сделать?

Устанавливает свойство cancelsTouchesInView которое cancelsTouchesInView в НЕТ.

 UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)]; singleTapGestureRecognizer.numberOfTapsRequired = 1; singleTapGestureRecognizer.enabled = YES; singleTapGestureRecognizer.cancelsTouchesInView = NO; [tapableView addGestureRecognizer:singleTapGestureRecognizer]; [singleTapGestureRecognizer release]; 

Из описания класса UIGestureRecognizer

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

Когда это свойство равно YES (по умолчанию), и приемник распознает его жест, касания этого жесткого ожидания, которые ожидаются, не доставляются в представление, а ранее доставленные касания отменяется через touchceCancelled: withEvent: сообщение, отправленное в представление. Если распознаватель жестов не распознает свой жест, или если значение этого свойства равно NO, вид получает все касания в последовательности с несколькими касаниями.

Для меня работала комбинация из вышеперечисленных ответов

 UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userDidTap:)]; tapRecognizer.cancelsTouchesInView = YES; tapRecognizer.delegate = self; [tapRecognizer requireGestureRecognizersToFail:self.scrollView.gestureRecognizers]; [self.view addGestureRecognizer:tapRecognizer]; 

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view.superview isKindOfClass:[UIButton class]] || [touch.view isKindOfClass:[UIButton class]]) { return NO; } return YES; } 

Вы также можете использовать метод gestureRecognizer:shouldReceiveTouch: метод UIGestureRecognizerDelegate , который UIGestureRecognizerDelegate здесь , для выполнения того же самого. Он предлагает немного большую гибкость, например, если вы хотите отменить некоторые касания, но не другие. Вот пример,

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view.superview isKindOfClass:[UIButton class]]) return NO; return YES; } 
  • ios возможно, чтобы uiscrollview обнаруживал одно нажатие на пользователя, сохраняя при этом возможности перетаскивания, прокрутки?
  • UIScrollView с фиксированным содержимым внутри
  • Длительный конец рукоятки
  • scrollview показывает только последний добавленный subview
  • Почему UIScrollView's contentSize настраивается при масштабировании?
  • Прокрутка неверна. Когда я использовал SDWebImage
  • UIScrollView не прокручивается до нужного места с помощью setContentOffset: анимированный:
  • UIScrollView: более точное / точное значение contentOffset?
  • Настройка contentOffset программно запускает scrollViewDidScroll
  • Перехват жестов жесты над прокруткой прокрутки UIScrollView
  • UITableView не работает в первый раз после изменения ограничений
  • Interesting Posts
    Давайте будем гением компьютера.