我正在尝试响应某些 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 方法为我解决了这个问题。谢谢你的帮助!