diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentLayoutDescriptor.mm b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentLayoutDescriptor.mm index 01952afb8..617fba7ab 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentLayoutDescriptor.mm +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentLayoutDescriptor.mm @@ -184,16 +184,17 @@ static std::vector>& subDescriptors() { return YES; }, [&](std::vector children) -> BOOL { + BOOL continueTouch = NO; for (auto it = children.rbegin(); it != children.rend(); ++it) { SKComponentLayoutWrapper* wrapper = *it; CGRect frame = {.origin = wrapper.position, .size = wrapper.size}; if ([touch containedIn:frame]) { NSUInteger index = std::distance(children.begin(), it.base()) - 1; [touch continueWithChildIndex:index withOffset:wrapper.position]; - return YES; + continueTouch = YES; } } - return NO; + return continueTouch; }); if (!didContinueTouch) { [touch finish]; diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentMountedViewDescriptor.mm b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentMountedViewDescriptor.mm index 58f5fd22e..ded8e9a06 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentMountedViewDescriptor.mm +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKComponentMountedViewDescriptor.mm @@ -72,16 +72,19 @@ return; // -children will return garbage if invoked on nil } const auto& children = node.children; + bool finish = true; for (auto it = children.rbegin(); it != children.rend(); ++it) { SKComponentLayoutWrapper* child = *it; CGRect frame = {.origin = child.position, .size = child.size}; if ([touch containedIn:frame]) { NSUInteger index = std::distance(children.begin(), it.base()) - 1; [touch continueWithChildIndex:index withOffset:child.position]; - return; + finish = false; } } - [touch finish]; + if (finish) { + [touch finish]; + } } - (BOOL)matchesQuery:(NSString*)query forNode:(SKComponentMountedView*)node { diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKApplicationDescriptor.m b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKApplicationDescriptor.m index 354622cee..7cd940ef5 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKApplicationDescriptor.m +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKApplicationDescriptor.m @@ -34,6 +34,7 @@ } - (void)hitTest:(SKTouch*)touch forNode:(UIApplication*)node { + bool finish = true; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; index--) { UIWindow* child = [self childForNode:node atIndex:index]; @@ -43,11 +44,12 @@ if ([touch containedIn:child.frame]) { [touch continueWithChildIndex:index withOffset:child.frame.origin]; - return; + finish = false; } } - - [touch finish]; + if (finish) { + [touch finish]; + } } - (NSArray*)visibleChildrenForNode:(UIApplication*)node { diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKScrollViewDescriptor.m b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKScrollViewDescriptor.m index bd4f33924..08b58d108 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKScrollViewDescriptor.m +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKScrollViewDescriptor.m @@ -49,6 +49,7 @@ } - (void)hitTest:(SKTouch*)touch forNode:(UIScrollView*)node { + bool finish = true; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; index--) { id childNode = [self childForNode:node atIndex:index]; @@ -75,11 +76,13 @@ if ([touch containedIn:frame]) { [touch continueWithChildIndex:index withOffset:frame.origin]; - return; + finish = false; } } - [touch finish]; + if (finish) { + [touch finish]; + } } @end diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKViewDescriptor.mm b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKViewDescriptor.mm index 44bef0406..d9d9a98be 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKViewDescriptor.mm +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/descriptors/SKViewDescriptor.mm @@ -497,6 +497,7 @@ return dataMutations; } - (void)hitTest:(SKTouch*)touch forNode:(UIView*)node { + bool finish = true; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; index--) { id childNode = [self childForNode:node atIndex:index]; @@ -518,11 +519,13 @@ return dataMutations; if ([touch containedIn:viewForNode.frame]) { [touch continueWithChildIndex:index withOffset:viewForNode.frame.origin]; - return; + finish = false; } } - [touch finish]; + if (finish) { + [touch finish]; + } } static void initEnumDictionaries() {