UIView中的touchesBegan没有被调用

时间:2012-07-10 11:14:42

标签: cocoa-touch uiview

我知道这个问题必须经过很多次回答,但现在真的让我头疼。

我的UIView中没有调用touchesBegan:。在我在我的应用程序中添加它之前,我先做了一个试验项目。在试验项目中,一切都很完美。我所做的是将实现touchesBegan:的UIView子类化,并将此UIView添加为另一个视图的子视图。第二个视图有一个按钮,显示单击后的子类UIView。同样,一切都完全符合我的要求。

现在,当我在现有应用中执行相同操作时,touchesBegan:方法(以及touchesMoved:)永远不会被调用。任何人都可以向我解释原因吗?我只是不明白为什么它从未被调用过。

3 个答案:

答案 0 :(得分:9)

我刚刚找到答案。我忘了提到视图位于另一个UIView中,userInteraction被禁用(默认情况下禁用)。因此,当我启用此视图的userInteraction时,现在可以识别触摸。

答案 1 :(得分:1)

在我的情况下,background = UIColor.clearColor()是未调用touchesBegan的原因。它显然没有被称为透明元素。

答案 2 :(得分:0)

我在这个问题上挣扎了一段时间......我想通了。我认为 touchesBegan 覆盖函数侦听主视图:ViewController的故事板树上的第一个!我想发布我的故事板的图像更清楚,但我不能! ;)

无论如何, IF 你有子视图,它们可能会覆盖主视图......这样触摸就不会“到达”主视图。

为避免这种情况,您必须将属性检查器中的背景属性设置为默认 所有子视图< / strong>即可。通过这种方式,背景将是透明的,触摸将能够到达主视图。

如果您不想将背景设置为透明,则可以执行以下操作:

- 添加上一个视图的出口(带背景设置)

- 添加点按手势识别器

- 处理键盘的手柄

ES。

在属性中:

//The last view's outlet
@IBOutlet weak var ContainerView: UIView!

在viewDidLoad()中:

let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
self.ContainerView.addGestureRecognizer(tap)

外:

func handleTap(recognizer: UITapGestureRecognizer){
    self.view.endEditing(true)
}