【发布时间】:2014-04-17 13:04:56
【问题描述】:
我有一个主视图控制器。它的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];
}
}
我只是希望能够使用hitTest 来测试触摸,一旦触摸验证,我会将子视图控制器及其视图添加为子视图并让它接收触摸(不是主视图)。它一直让我发疯。请让我知道我在这里做错了什么。
另一件事是:我认为我的设计在这里是错误的,因为这个视图不应该/不需要抓住它的控制器 (myController)。但是我需要能够从myController 中的hitTest 返回控制器的视图(controller),这就是我这样做的原因。
虽然我的直觉告诉我我的设计是错误的,但我不知道如何更好地设计它。但这将是第二步,现在我希望能够让该控制器 (controller) 在添加后接收触摸。
当前控制器/视图层次结构:
[主控制器]
\ [view] (handles hitTest)触摸验证:
主控制器添加另一个控制器作为childController,其触摸被
hitTest在主控制器视图中拦截。
【问题讨论】:
-
您是说您希望创建子视图控制器的触摸也由子视图控制器处理吗?或者您是说您只想将后续触摸传递给子视图控制器?另外,您的代码中的
views是什么? -
@JesseRusak 是的,一旦添加了子视图控制器,我希望它能够接收触摸,但目前
hitTest(在主控制器的视图中)正在获得所有触摸,即使子视图如图所示添加控制器及其视图。views是一个数组,它工作正常。谢谢。
标签: ios objective-c model-view-controller uiviewcontroller uitouch