Ios hitTest正在拦截来自子控制器的触摸

Ios hitTest正在拦截来自子控制器的触摸,ios,objective-c,model-view-controller,uiviewcontroller,uitouch,Ios,Objective C,Model View Controller,Uiviewcontroller,Uitouch,我有一个主视图控制器。它的视图处理命中测试 因此,当触摸到特定点时,我会创建另一个控制器,并将此控制器添加到主视图控制器,如下所示: [self addChildViewController:childController]; [childController didMoveToParentViewController:self]; [self.view addSubview:childController.view]; 它可以工作,但我最大的问题是主视图仍然在它的hitTest中拦截所有接触

我有一个主视图控制器。它的
视图
处理
命中测试

因此,当触摸到特定点时,我会创建另一个控制器,并将此控制器添加到主视图控制器,如下所示:

[self addChildViewController:childController];
[childController didMoveToParentViewController:self];
[self.view addSubview:childController.view];
它可以工作,但我最大的问题是主视图仍然在它的
hitTest
中拦截所有接触

以下是我的
hitTest
实现:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{                
    for(int x = 0; x < [views count]; x++)
    {    
        NSValue *encodedRect = [views objectAtIndex:x];
        CGRect rect;
        [encodedRect getValue:&rect];

        if(CGRectContainsPoint(rect, point))
        {
            foundTheTouchedPoint = YES;
            return;
        }
    }

    if(foundTheTouchedPoint)
    {
        //This is a method where [self addChildViewController..]; etc takes place
        [self.myController createChildController];

        return self.myController.controller.view;
        //myController is the controller of this view.
        //controller is a property of myController, whose view I would like to 
        //receive touch once the touch validates.
    }
    else
    {
        return [super hitTest:point withEvent:event];
    }
}
触摸验证:

主控制器添加另一个控制器作为childController,其触摸被主控制器视图中的
hitTest
截获


如果停止重写
hitTest:withEvent:
,您可能会发现这更容易实现。默认情况下,如果您不覆盖它,它会将这些触摸传递给您的子视图控制器;在这里混合实际的事件处理是很尴尬的。(该方法的任务是确定哪个子视图应该获取事件,因此不能阻止它接收指定给子视图的事件。)


相反,您可能希望在主视图中创建一个
UIControl
,并使用其触发的操作或覆盖其
BeginTrackingTouchs:withEvent:
方法来创建子视图控制器

您是说希望创建子视图控制器的触摸也由子视图控制器处理吗?或者您的意思是只希望后续的触摸传递到子视图控制器?另外,代码中的
视图
是什么?@JesseRusak是的,一旦添加了子视图控制器,我希望它能够接收触摸,但是当前
hitTest
(在主控制器视图中)正在获得所有触摸,即使子视图控制器及其视图已添加,如图所示<代码>视图是一个数组,工作正常。谢谢。请您再详细说明一下,因为我从未使用过
BeginTouchs:withEvent:
,我将如何使用它将触摸传递给子控制器,当子视图控制器不再在视图中时,让它放弃触摸,并且主控制器再次控制触摸?我是说,
hitTest:withEvent:
的默认实现将正确地将触摸传递给子视图控制器可见,并在移除触摸时停止向其传递触摸。您只需使用
addSubview:
将它们添加到视图中即可
BeginTrackingTouchs:withEvent:
将为您提供一个放置代码以添加子vcs的位置。您尝试过我的建议吗?您确定在您的子视图控制器上没有其他视图正在接受事件吗?
    \

 [view] (handles hitTest)