Xcode iOS UIView 带有点击手势,允许在子视图上输入

Posted

技术标签:

【中文标题】Xcode iOS UIView 带有点击手势,允许在子视图上输入【英文标题】:Xcode iOS UIView with tap gesture allowing input on subviews 【发布时间】:2015-04-23 04:34:27 【问题描述】:

所以我有一个人们在首次启动应用程序时看到的主页视图,它有几个不同的选项。昨天我添加了一个教程覆盖,所以他们第一次打开应用程序时,我有一个 0.5 alpha 黑色的视图,并且在另一个视图上是全屏的,这个视图有白色文本和指向页面上功能的箭头。我在这个视图上附加了一个轻击手势识别器,它的作用是调用下一个教程屏幕(总共 3 个)。之后它们都被隐藏了,应用程序正常运行。这一切都有效,除了即使我的视图是全屏的,并且选中了启用用户交互和手势点击识别器,子视图上的手势/触摸仍然有效。因此,如果我只是在应用程序上点击一些空白区域,则教程和点击手势按预期工作,循环浏览页面等并正常工作。但是,如果我不小心按下了子视图按钮或从子视图做一个手势,它将执行操作(带您到新页面或 w/e)

所以基本上就我所知,尽管我的视图位于另一个之上并且有一个轻击手势识别器附加到视图上,但子视图仍然被按下,有什么想法吗?

【问题讨论】:

因为您在主视图中添加了轻击手势,所以它的所有子视图都将获得此手势。 有没有办法禁用或覆盖它? 【参考方案1】:

在进行任何操作之前检查点击事件视图..

- (IBAction)yourTapEvent:(UITapGestureRecognizer *)gestureRecognizer
    
        UIView *piece = [gestureRecognizer view];

        if(piece  == (view on which you have added gesture))
        
            //Do your necessary operation
        

    

【讨论】:

【参考方案2】:

试试这个,它会帮助你在其子视图上禁用手势

 - (void)tapAction:(UITapGestureRecognizer *) gestureRecognizer
      UIView *v = [gestureRecognizer view];// Guesture added view
        NSArray *temp = [self.view subviews];
        for (int i = 0; i<temp.count; i++) 
            if([temp objectAtIndex:i]== v)
                // Do your swipe tap action here
            
        
    

【讨论】:

以上是关于Xcode iOS UIView 带有点击手势,允许在子视图上输入的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 4:UIScrollView 中的 UIView

iOS 7 - 透明的 UIView 阻塞手势识别器

创建一个捕捉点击但对所有其他手势透明的 UIView

SwiftUI:带有onTapGesture的列表单元格内的菜单触发手势

重叠视图中的 ios 手势识别器

如果*** UIView 没有收到它想要处理的手势,则将手势/触摸传递给另一个 UIView?