我知道这个问题必须经过很多次回答,但现在真的让我头疼。
我的UIView中没有调用touchesBegan:
。在我在我的应用程序中添加它之前,我先做了一个试验项目。在试验项目中,一切都很完美。我所做的是将实现touchesBegan:
的UIView子类化,并将此UIView添加为另一个视图的子视图。第二个视图有一个按钮,显示单击后的子类UIView。同样,一切都完全符合我的要求。
现在,当我在现有应用中执行相同操作时,touchesBegan:
方法(以及touchesMoved:
)永远不会被调用。任何人都可以向我解释原因吗?我只是不明白为什么它从未被调用过。
答案 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)
}