Ios 如何使UINavigationController触摸通过

Ios 如何使UINavigationController触摸通过,ios,objective-c,uinavigationcontroller,touch-event,Ios,Objective C,Uinavigationcontroller,Touch Event,基本上,我想要实现的是同时显示两个导航控制器(它们的视图应该是一个在另一个之上)。如果触摸不在顶部导航控制器(顶部导航控制器视图的子视图)中显示的某些元素上,我希望位于顶部的导航控制器视图将触摸转发到下面的导航控制器。 我尝试了多种方法,但似乎都不管用。最接近我得到的解决方案是在视图控制器的view属性中使用以下方法。这适用于常规视图控制器,但我认为导航控制器有一些子视图会干扰它 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)ev

基本上,我想要实现的是同时显示两个导航控制器(它们的视图应该是一个在另一个之上)。如果触摸不在顶部导航控制器(顶部导航控制器视图的子视图)中显示的某些元素上,我希望位于顶部的导航控制器视图将触摸转发到下面的导航控制器。 我尝试了多种方法,但似乎都不管用。最接近我得到的解决方案是在视图控制器的
view
属性中使用以下方法。这适用于常规视图控制器,但我认为导航控制器有一些子视图会干扰它

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    if (!self.forwardTouchesToSubviews) {
        return NO;
    }
    BOOL pointInSubview = NO;

    for (UIView *view in self.subviews) {
        if (!view.isHidden && CGRectContainsPoint(view.frame, point)) {
            CGPoint newPoint = [view convertPoint:point fromView:self];
            pointInSubview = [view pointInside:newPoint withEvent:event];

            if (pointInSubview) {
                return YES;
            }
        }
    }
    return NO;
}
对于我的应用程序来说,以这种方式构建导航将大大简化导航逻辑,在我看来,在许多情况下,这是一个非常灵活的解决方案,但我似乎无法让它工作

编辑

让事情变得简单。假设我有一个背景导航控制器(有一些漂亮的动画,形成了应用程序的背景)。除此之外,还有各种各样的UI元素(控件、按钮、赋予应用程序功能的东西)没有覆盖整个屏幕,因此背景仍然可见。这些元素组成多个屏幕(因此需要导航控制器)。此外,可能有多个背景独立于上面的UI元素而改变,因此需要一个导航控制器(这里可以使用其他一些控制器,但假设我们为了示例而使用导航控制器)。为了使事情更加复杂,触摸不包含UI元素的区域应该提供一些动画反馈(因此背景控制器)应该拦截上面UI元素未捕获的触摸


我希望这能澄清我想做的事情。

我们能看一张图表或其他东西来进一步澄清您希望这是如何工作的吗?我真的不确定两个堆叠的导航控制器如何使这对你来说更容易,似乎这只会使事情变得复杂。我为这个问题添加了更多的上下文。希望现在我想做的事情更清楚了。我找到的唯一解决方案是在包含两个导航控制器的视图中重写
hitTest(:with:)
,并检查返回的视图是否是
UIViewControllerRapperView
的实例。丑陋,但有效。