diff --git a/React/Base/RCTRootView.m b/React/Base/RCTRootView.m index 78896f5fe482e1..26bbdde8aeab45 100644 --- a/React/Base/RCTRootView.m +++ b/React/Base/RCTRootView.m @@ -35,7 +35,7 @@ - (NSNumber *)allocateRootTag; @end -@interface RCTRootContentView : RCTView +@interface RCTRootContentView : RCTView @property (nonatomic, readonly) BOOL contentHasAppeared; @property (nonatomic, readonly, strong) RCTTouchHandler *touchHandler; @@ -327,6 +327,7 @@ - (instancetype)initWithFrame:(CGRect)frame _bridge = bridge; self.reactTag = reactTag; _touchHandler = [[RCTTouchHandler alloc] initWithBridge:_bridge]; + _touchHandler.delegate = self; [self addGestureRecognizer:_touchHandler]; [_bridge.uiManager registerRootView:self withSizeFlexibility:sizeFlexibility]; self.layer.backgroundColor = NULL; @@ -381,4 +382,20 @@ - (void)invalidate } } +#pragma mark - UIGestureRecognizerDelegate + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch +{ + if (![gestureRecognizer isKindOfClass:[RCTTouchHandler class]]) { + return YES; + } + + UIView *currentView = touch.view; + while (currentView && ![currentView isReactRootView]) { + currentView = currentView.superview; + } + return currentView == self; +} + + @end