我可能在这里遗漏了一些东西,但是...
我有UIView
几个孩子(几个UILabel
' 和UIImageView
)。当用户单击(点击)父级内的任何位置时,我需要捕捉一个事件-或其任何子级的UIView
可见部分)。UIView
这样做的最佳方法是什么?
我可能在这里遗漏了一些东西,但是...
我有UIView
几个孩子(几个UILabel
' 和UIImageView
)。当用户单击(点击)父级内的任何位置时,我需要捕捉一个事件-或其任何子级的UIView
可见部分)。UIView
这样做的最佳方法是什么?
您可以在 Identity Inspector 中更改 UIView 的类......UIControl
然后您可以UITouchUpInside
为您的视图添加一个事件 - 以捕捉它的点击。
祝你好运!
编辑:这是一步一步的截图:
风景...
...当然,没有事件。
返回并使用 UIControl 更改 UIView 和...
达达!活动!
将方法挂钩到 UITouchUpInside 事件
这就是它在接口文件中的样子
这就是它在实现文件中的样子(当然,你可以用你想要的任何东西替换日志)
您可以通过为您的父视图设置一个手势识别器并确保您的孩子没有自己的手势识别器来假装这种行为。为此,请向您的父母添加一个手势识别器以UIView
监听轻按。parentView
您的子视图 ( UILabels
/ UIImageView
)的包含视图在哪里,并且handleTap
是由 实现的方法parentView
,请执行以下操作:
UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)];
[parentView addGestureRecognizer:tapParent];
[tapParent release];
由于您的子视图没有自己的手势识别器,它们不会“吃掉”手势,因此只要您在其范围内点击,父视图就会响应。
您必须提供更多详细信息,因为有多种选择。
如果您想要正常的点击,您可以捕获标准触摸事件之一并查看哪个子视图得到了该事件。像这样的东西:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if(touch.view != self.mySubViewOfInterest)
{
// perform my actions
}
}
如果您需要复杂的手势识别,那么您可以使用 UIGestureRecognizer 之一并将其分配给子视图或主视图。
无论如何,您必须注意所有子视图(您希望它们捕获事件的子视图)必须启用用户交互,否则您的主视图也会捕获子视图的事件,您最终会在不了解什么的情况下进行调试和调试正在发生。
斯威夫特 4:
let clickGesture = UITapGestureRecognizer(target: self, action: #selector(self.onUiViewClick))
uiView.addGestureRecognizer(clickGesture)
@objc func onUiViewClick(sender : UITapGestureRecognizer) {
}
这对我有用
斯威夫特 3
let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick))
withSender: self)
customView.addGestureRecognizer(gesture)
func customViewClick() {
print("custom view clicked!")
}