如果collectionView低于某些uiview,iOS如何使collectionView接收触摸

Posted

技术标签:

【中文标题】如果collectionView低于某些uiview,iOS如何使collectionView接收触摸【英文标题】:iOS how to make collectionView receive touches if it's below some uiview 【发布时间】:2015-09-22 02:41:19 【问题描述】:

我问一些不同的场景:

ios How to make UIButton below UICollectionView receive touch?

但我也想知道是否可以在没有透明背景颜色的情况下将 collectionView 对齐到 uiview 下面并接收触摸?

然后我想在蓝色视图触发 collectionView 滚动行为时移动手指,并且我还想 UIButton 接收触摸。

命中测试不是解决方案。

为什么?

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
    if ([self pointInside:point withEvent:event]) 
        for (UIView *subview in [self.subviews reverseObjectEnumerator]) 
            CGPoint convertedPoint = [subview convertPoint:point fromView:self];
            UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
            if (hitTestView) 
                return hitTestView;
            
        
        return self;
    
    return nil;

只是因为手指在蓝色视图时它没有被触发。

【问题讨论】:

【参考方案1】:

您可以使用 userInteractionEnabled=YES 子类化 UIView(蓝色),然后使用 hitTest

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) return nil; // <--- pass-through if touch on UIView (blue view)
    else return hitView; // touch on children (UIButton)

【讨论】:

对不起,但这不是我的解决方案。因为蓝色视图它只是一个容器。例如,其中将包括一个 ImageView 甚至是 collectionView(用于滚动照片)。

以上是关于如果collectionView低于某些uiview,iOS如何使collectionView接收触摸的主要内容,如果未能解决你的问题,请参考以下文章

为 collectionView 中的每个其他项目设置特定布局

UICollectionViewCell 宽度的动态变化

在 collectionView 中加载图像

如何以动态宽度水平居中collectionView项目?

VStack 中 FrameHeight 低于 1 不准确

Xcode UICollectionView 如何通过 indexpath 禁用某些单元格