0

我正在尝试响应某些 UIView 上的触摸事件。这是视图控制器在 IB 中的外观:

在此处输入图像描述

这是视图层次结构:

在此处输入图像描述

我已经实现了所有四种“触摸”方法,如下所示:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    if(touch.view==locPhoneView){
        locPhoneView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"];
    }
    if(touch.view==locAddressView){
        locAddressView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"];
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    if(touch.view==locPhoneView){
        locPhoneView.backgroundColor=[UIColor whiteColor];
    }
    if(touch.view==locAddressView){
        locAddressView.backgroundColor=[UIColor whiteColor];
    }

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

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

}

无论我触摸屏幕的哪个位置,都不会发送事件。我在“touchesBegan”的开头有一个断点,这个代码永远不会到达。

所有视图都选中了“启用用户交互”,并适当地连接到它们的插座。

我错过了什么?在我的项目的其他地方,我也在做同样的事情,而且效果很好。

这可能与我的根视图是 UIScrollView 的事实有关吗?

谢谢!

编辑:我遵循了以下建议,并将 UIScrollView 子类化,以便将触摸发送到 NextResponder。看来我现在正在接触,但是,视图的背景颜色是否实际发生变化并没有正确运行。

例如,如果我快速点击视图,“触摸”方法会触发,但背景颜色不会改变。但是,如果我点击并按住大约一秒钟,背景颜色会按照我的预期发生变化。知道是什么导致了这种奇怪的行为吗?

编辑:添加行:

[scrollView setDelaysContentTouches:NO];

我的 viewDidLoad 方法为我解决了这个问题。谢谢你的帮助!

4

1 回答 1

1

你是对的,你的问题是你的视图被放置在 UIScrollView 中。滚动视图正在获取所有触摸事件并且不会将它们传递给它的子视图。

您可以获得此问题的解决方案:

于 2012-10-04T17:23:48.820 回答