UIView中的touchesBegan没有被调用

问题描述 投票:8回答:3

我知道这个问题一定已经回答了很多遍,但是我不知道为什么在我的touchesBegan:中没有调用UIView

在将其添加到应用程序之前,我做了一个试验项目以进行一些测试。我所做的是在UIView的子类中实现了touchesBegan:,并将其添加为另一个视图的子视图。超级视图具有一个按钮,单击该按钮即可显示子类UIView。一切正常。

但是,当我在现有应用程序中执行相同的操作时,永远不会调用touchesBegan:方法以及touchesMoved:。任何人都可以解释阻止该方法被调用的原因吗?

cocoa-touch uiview
3个回答
10
投票

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


1
投票

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


0
投票

我在这个问题上苦苦挣扎了一段时间……我弄清楚了。我认为touchesBegan重写函数在主视图上侦听:ViewController的情节提要树上的第一个!我想发布我的情节提要的图像更加清晰,但我做不到! ;)

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

为避免这种情况,您必须将ALL THE SUBVIEWSAttribute Inspector中的Background属性设置为Default。这样,背景将是透明的,并且触摸将能够到达主视图。

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

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

-向其中添加轻击手势识别器

-处理配置键盘的水龙头

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.