如何让UIView停止接收触摸事件?

时间:2014-03-09 11:21:05

标签: ios uiview uiviewcontroller uitouch uievent

我正在开发一个应用程序,用户需要快速触摸并滑动多个UIViews,每个UIViews应该在用户的手指到达后执行操作。我有很多的视图,所以这是典型的事情,我会遍历每个视图以查看触摸是否在其范围内,是不行的 - 只是太滞后了。有没有其他方法可以将触摸事件从一个视图转到另一个视图(与第一个视图相邻)?我想也许有一些方法可以取消触摸事件,但我已经搜索到目前为止已经空了。

我遇到的一个大问题是,如果我在视图控制器中实现触摸处理,touchesBegan只会触发第一次触摸 - 如果用户触摸某些内容,然后在不移动第一根手指的情况下点击其他内容,触摸不会记录在touchesBegan或touchesMoved中。但是如果我在UIViews中自己实现触摸处理,一旦视图记录触摸,如果用户没有抬起手指并移动它,则第一个视图周围的视图不会记录触摸。只有当用户抬起手指然后将其放回原位时,周围的视图才会记录触摸。

所以我的问题是,让我说我有两个并排的视图,我的触摸处理代码在视图中实现,我把手指放在视图1上。然后我将手指滑到视图2 - 什么做我需要做的是使视图2注册触摸,从视图1开始,从不“结束”?

3 个答案:

答案 0 :(得分:3)

UIView的{​​{3}}属性设置为NO

view.userInteractionEnabled = NO;

答案 1 :(得分:1)

UIView具有以下属性:

@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled

答案 2 :(得分:0)

好的,我弄清楚发生了什么。事实是,我把我的观点作为滚动视图的子视图,它本身就是我主视图的子视图。使用scrollEnabled = NO,我可以触摸我的子视图 - 但显然scrollview只转发我初始触摸事件,所有后续触摸都是初始事件的一部分。因此,我有许多奇怪的问题,例如一个接一个地触摸两个视图,两个都会选择并突出显示,但是如果我将第一个手指从屏幕上移开两个视图将取消选择。这不是理想的行为。

所以我做的是我将滚动视图子类化并覆盖了触摸处理方法,将事件发送到第一个响应者,这是它的超级视图,这是我正在进行触摸处理的视图。现在它有效!