繁体   English   中英

带孩子的UIView上的TouchUpInside

[英]TouchUpInside on UIView with children

我可能在这里遗漏了一些东西,但......

我有一个带有几个孩子的UIView (一对UILabelUIImageView )。 我需要捕获的事件,当用户点击(抽头),母体内的任何地方UIView -在可见部分UIView或任何其子女的)。

这样做的最佳方法是什么?

您可以在Identity Inspector中更改UIView的类...使其成为UIControl ,然后您可以为您的视图添加UITouchUpInside事件 - 捕获它上的点击​​。

祝好运!

编辑:这是截图的一步一步:

风景... 原始视图 - 类型UIView

......当然,没有事件。 UIView没有你可以使用的活动

返回并使用UIControl更改UIView并... 将UIView更改为UIControl

TA-DAA! 活动! UIControl允许您使用事件

将方法挂钩到UITouchUpInside事件 为UITouchUpInside添加事件

这是它在接口文件中的样子 方法的界面

这就是它在实现文件中的样子(当然,你可以用你想要的任何东西替换日志记录) 该方法的实现

您可以通过为父视图设置手势识别器并确保您的孩子没有自己的手势识别器来假装此行为。 为此,请向您的父UIView添加一个侦听点击的手势识别器。 其中parentView是子视图的包含视图( UILabels / UIImageView ), handleTapparentView实现的方法,请执行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并将其分配给子视图或主视图。

无论如何,您必须注意所有子视图(您希望它们捕获事件的那些)必须启用用户交互,否则您的主视图也将捕获子视图的事件,您将最终调试和调试而不了解什么正在发生。

这适合我

斯威夫特3

 let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick))
withSender: self)
 customView.addGestureRecognizer(gesture)


 func customViewClick()  {
     print("custom view clicked!")
    }

斯威夫特4:

let clickGesture = UITapGestureRecognizer(target: self, action:  #selector(self.onUiViewClick))
uiView.addGestureRecognizer(clickGesture)

 @objc func onUiViewClick(sender : UITapGestureRecognizer) {

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM