9

我知道这个问题一定已经回答了很多次了,但我不知道为什么touchesBegan:我的UIView.

在我将它添加到我的应用程序之前,我做了一个试验项目来做一些测试。我所做UIViewtouchesBegan:是实现的子类 a 并将其添加为另一个视图的子视图。超级视图有一个按钮,UIView单击后会显示子类。一切都按预期工作。

但是,当我在现有应用程序中执行相同操作时,从未调用该touchesBegan:方法以及. touchesMoved:谁能解释是什么阻止了这些方法被调用?

4

3 回答 3

11

我刚刚找到了这个问题的答案。我意识到 superview 的UIView设置userInteraction为禁用(这是默认值)。因此,当我启用userInteraction超级视图时,现在可以识别触摸。

于 2012-07-12T09:10:01.503 回答
8

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

于 2014-12-08T22:08:51.787 回答
1

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

无论如何,如果您有子视图,它们可能会覆盖主视图......以这种方式触摸不会“到达”主视图。

为避免这种情况,您必须将Attribute Inspector中的Background属性设置为所有 SUBVIEWS的默认值。这样背景将是透明的,触摸将能够到达主视图。

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

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

- 添加轻击手势识别

- 处理处理键盘的水龙头

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)
}
于 2015-10-02T09:31:19.360 回答