Cocoa touch 如何在两个UIViewController之间跟踪UITouches?(使用安全壳)

Cocoa touch 如何在两个UIViewController之间跟踪UITouches?(使用安全壳),cocoa-touch,ios5,uiviewcontroller,uitouch,Cocoa Touch,Ios5,Uiviewcontroller,Uitouch,我有两个视图控制器使用视图控制器控制同时出现在屏幕上,实现方式与苹果的代码示例相同。将它们称为视图控制器A(vcA)、视图控制器B(vcB)和容器视图控制器(containerVC) 每个vcA和vcB都有一个对象网格,我希望能够将对象从vcA拖动到vcB。更具体地说,我希望起源于vcA的触控一旦在vcB的边界内,就会命中vcB中的toucheMoved:withEvent方法 我已覆盖containerVC上的toucheMoved:withEvent方法,通过点击测试跟踪触摸,并尝试将触摸转

我有两个视图控制器使用视图控制器控制同时出现在屏幕上,实现方式与苹果的代码示例相同。将它们称为视图控制器A(vcA)、视图控制器B(vcB)和容器视图控制器(containerVC)

每个vcA和vcB都有一个对象网格,我希望能够将对象从vcA拖动到vcB。更具体地说,我希望起源于vcA的触控一旦在vcB的边界内,就会命中vcB中的toucheMoved:withEvent方法

我已覆盖containerVC上的toucheMoved:withEvent方法,通过点击测试跟踪触摸,并尝试将触摸转发到UIView层次结构,如下所示:

// in the containerVC
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint locationPoint = [[touches anyObject] locationInView:self.view];
    UIView* touchIsInViewControllerA = [vcA hitTest:locationPoint withEvent:event];
    if (touchIsInViewControllerA) {
        NSLog(@"Touch is in vcA");
        return;
    }
    UIView* touchIsInViewControllerB = [vcB hitTest:locationPoint withEvent:event];
    if (touchIsInViewControllerB) {
        NSLog(@"Touch is in vcB");
        [vcB touchesMoved:touches withEvent:event]; // this causes a crash
    }
}
这似乎是递归的,containerVC将触摸事件向下推到层次结构上,然后vcB将触摸事件传递回层次结构上

我的问题:有没有办法防止vcB将触控事件传递回应答器链到containerVC?或者我应该用另一种方式来处理这个问题——让vcB成为vcA的代表,而不考虑containerVC


注意:我猜一个常见的反应是放弃VC包容模式,将其全部保留在一个视图控制器中,但是由于本例中未显示的原因,我认为将它们分开对我来说会更好-除非这样做完全是疯狂和非常有技巧的…

通过为每个视图控制器设置单独的手势对象,这个问题可以很容易地解决

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

 if (touchIsInViewControllerA) {

// calls a delegate of view controller A

  }
else
 {

// calls a delegate of view controller B
 }
}

通过为每个视图控制器设置单独的手势对象,可以轻松解决此问题

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

 if (touchIsInViewControllerA) {

// calls a delegate of view controller A

  }
else
 {

// calls a delegate of view controller B
 }
}