У меня есть UIView подкласс, все это нужно сделать, это:Как отключить SuperView touchBegan события
@implement MyView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
NSLog(@"touch began");
}
@end
Теперь я создаю два экземпляра MyView, один (C) является 50px высоты, другой (S) высота 100px. Более короткий (C) является подзором более высокого (S), у них есть другой цвет фона.
Затем я запускаю приложение и нажимаю на C, и C и S получают прикосновение к событиюBegan.
Мои вопросы, как я могу предотвратить S (наблюдение) от получения события касания, когда я нажимаю на C? В то время как C над ним (если C является экземпляром UIButton, он работает так, как ожидалось).
Для изображения ниже:
- , когда я нажимаю на красной точки зрения, как синий и красный вид вид получить событие, но я хочу только красный вид получить его.
- Когда я нажимаю на синюю область, только событие получения голубого изображения работает, как ожидается.
---- отредактирован 1 ----
Этот метод работает только тогда, когда я использую только MyView, это не мешает распространение события:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
if(touch.view != self){
// ignore the event
return;
}
NSLog(@"touch began");
}
---- редакция 2 ----
см @ комментарий TomasCamin в
Есть ли какой-либо метод, как мы делаем с javascript в веб-браузере , с javascript, это 'event.preventDefault()' – ideawu
на самом деле это 'event.stopPropagation()' в браузере. preventDefault делает больше, чем stopPropagation. – glyuck
Я просто попытался воспроизвести вашу проблему на iOS 8.1, но не смог этого сделать. Прикосновения к C не распространяются на S, если только я не назову '[super touchhesBegan: касается событияEvent: event];' в 'MyView'' touchhesBegan: touchhes' –