如何使'touchesBegan'方法适用于特定视图?

Man*_*ano 7 iphone uiview touchesbegan ios

在我的添加联系人页面中,我有一个视图和一个滚动视图,并再次有一个视图.在最后一个视图中我有文本框等,我已经给出了'touchesBegan'方法,但它仅在底部的视图中调用.如何将该方法指向另一个视图,即顶部的视图?

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 [self.AddView endEditing:YES];
}   
Run Code Online (Sandbox Code Playgroud)

Rus*_*shi 27

一种方法是你可以这样做:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch= [touches anyObject];
    if ([touch view] == image1)
    {
        //Action
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意:在使用UIScrollView时,您可能无法获得UIScrollView的触摸方法.在这种情况下,您可能必须使用UIGesture.

  • 提及它的大拇指不适用于`UIScrollView` :) (10认同)

And*_*dam 8

这是Swift的答案:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    if(touch.view == myView){
        // Code
    }
}
Run Code Online (Sandbox Code Playgroud)


Par*_*shi 6

首先检查UserInteractionEnabled整个控件的属性并设置为YES

在查看底部视图框架后,该视图上没有结束

并且您可以通过波纹状况检查出来并使用特定控制触摸事件做某事.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    [touch locationInView:viewBoard];
    if([touch.view isKindOfClass:[UIImageView class]])
    {
       UIImageView *tempImage=(UIImageView *) touch.view;
       if (tempImage.tag  == yourImageTag) 
       {
          /// write your code here
       }
     }
}
Run Code Online (Sandbox Code Playgroud)