我知道这个问题一定已经回答了很多遍,但是我不知道为什么在我的touchesBegan:
中没有调用UIView
。
在将其添加到应用程序之前,我做了一个试验项目以进行一些测试。我所做的是在UIView
的子类中实现了touchesBegan:
,并将其添加为另一个视图的子视图。超级视图具有一个按钮,单击该按钮即可显示子类UIView
。一切正常。
但是,当我在现有应用程序中执行相同的操作时,永远不会调用touchesBegan:
方法以及touchesMoved:
。任何人都可以解释阻止该方法被调用的原因吗?
我刚刚找到了答案。我意识到UIView
的超级视图已将userInteraction
设置为禁用(这是默认值)。因此,当我启用超级视图的userInteraction
时,就可以识别触摸了。
在我的情况下,background = UIColor.clearColor()
是未调用touchesBegan
的原因。它显然没有调用透明元素。
我在这个问题上苦苦挣扎了一段时间……我弄清楚了。我认为touchesBegan重写函数在主视图上侦听:ViewController的情节提要树上的第一个!我想发布我的情节提要的图像更加清晰,但我做不到! ;)
无论如何,IF您有子视图,它们可能会覆盖主视图...这样,触摸就不会“到达”主视图。
为避免这种情况,您必须将ALL THE SUBVIEWS的Attribute 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)
}