【发布时间】:2009-07-30 15:15:53
【问题描述】:
苹果真的很有趣。我的意思是,他们说这行得通:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
if (numTaps < 2) {
[self.nextResponder touchesBegan:touches withEvent:event];
} else {
[self handleDoubleTap:touch];
}
}
我有一个视图控制器。如你所知,视图控制器继承自 UIResponder。该视图控制器创建一个继承自 UIView 的 MyView 对象,并将其作为子视图添加到它自己的视图中。
所以我们有:
View Controller > 有一个 View(自动)> 有一个 MyView(这是一个 UIView)。
现在在 MyView 中,我将上面的代码与打印“touched MyView”的 NSLog 放在一起。但是我将事件转发给下一个响应者,就像上面一样。在 ViewController 内部我有另一个 touchesBegan 方法,它只打印一个 NSLog 一个 la “触摸视图控制器”。
现在猜猜看:当我触摸 MyView 时,它会打印“touched MyView”。当我触摸 MyView 外部时,即 VC 的视图,我得到一个“触摸视图控制器”。所以两者都有效!但不起作用的是转发事件。因为现在,实际上下一个响应者应该是视图控制器,因为中间没有别的东西。但是我转发时VC的事件处理方法从来没有被调用过。
%$&!§!!
想法?
找出奇怪的东西 MyView 的下一个响应者是视图控制器的视图。这是有道理的,因为 MyView 是它的子视图。但是我没有从视图控制器修改这个 UIView。这不是什么习俗。而且它没有实现任何触摸事件处理。消息不应该传递给视图控制器吗?我怎么能让它过去呢?如果我删除 MyView 中的事件处理代码,那么事件会很好地到达视图控制器。
【问题讨论】:
标签: iphone