2012-05-23 17 views
18

我可能失去了一些东西,但是......TouchUpInside上的UIView儿童

我有几个孩子UIView(一对夫妇的UILabel的和UIImageView)。我需要当用户点击(抽头)来捕捉事件父UIView内的任何地方 - 在UIView或其任何子女)的可见部分。

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

+0

您正在使用的Xcode 4? – Sirens

回答

44

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

祝你好运!

编辑:这里是一个一步一步用截图:

的观点... Original view - of type UIView

...当然,没有事件。 UIView has no events you can use

回去改的UIView与UIControl和... Change UIView to UIControl

的Ta-DAA!活动! UIControl allows you to use events

钩到UITouchUpInside事件的方法 Add event for UITouchUpInside

这是应该的样子在接口文件 The interface of the method

这是应该看起来像在实现文件(可以,当然,用任何你想要的东西来代替伐木) The implementation of the method

+0

有人可以为此提供代码示例吗? – WebOrCode

+1

@WebOrCode:我编辑了我的答案并添加了屏幕截图,希望它有帮助。 – DarkByte

1

由于有多个选项,您必须提供更多的细节。

如果你想正常的自来水,你可以赶上标准的触摸事件之一,看看子视图得到了该事件。事情是这样的:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    if(touch.view != self.mySubViewOfInterest) 
    { 
     // perform my actions 
    } 
} 

如果需要复杂的手势识别,那么你可以使用UIGestureRecognizer之一,并把它分配给子视图或主视图。

无论如何,您必须注意,所有子视图(您希望他们捕捉事件的子视图)必须启用用户交互,否则您的主视图也会捕获子视图的事件,最终您将调试并调试时不知道发生了什么。

6

可以通过让你的父视图手势识别器,并确保你的孩子没有自己的手势识别器假死这种行为。为此,请向您的父母UIView添加手势识别器,以侦听轻敲。其中parentView是为您的孩子的意见(UILabels/UIImageView)和handleTap含有看法是parentView实现的方法,这样做:

UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)]; 
[parentView addGestureRecognizer:tapParent]; 
[tapParent release]; 

随着孩子的观点并不拥有自己的手势识别器,他们不会'吃'的姿态,所以只要你在其范围内点击,父视图就会响应。

0

这适用于我

斯威夫特3

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


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