【问题标题】:Views within custom UICollectionViewCell not receiving touch events自定义 UICollectionViewCell 中的视图未接收到触摸事件
【发布时间】:2014-03-23 09:54:00
【问题描述】:

我有一个支持水平和垂直滚动的UICollectionView。每个集合视图单元都是UICollectionViewCell 的子类,它们是从包含UIButtonUITableView 甚至另一个UICollectionView 的NIB 加载的。它们都在TPKeyboardAvoidingScrollView 中。

滚动在水平和垂直方向上都能完美运行,但它没有接收到单个UICollectionViewCell 上元素的触摸事件。当我触摸任何元素时,比如说一个属于UICollectionViewCell 的按钮,那么我得到的只是UICollectionViewDelegate 上的didSelectItemAtIndexPath 事件 - 我无法将任何触摸事件传递给其中一个点击发生的集合视图单元格的子视图。

【问题讨论】:

    标签: events uicollectionview subview uicollectionviewcell


    【解决方案1】:

    在浏览了其他一些 stackoverflow 文章后,我最终找到了导致我的问题的原因 - 我用来初始化 UICollectionViewCell 的 XIB 文件在根目录中有一个正常的 UIView 元素;即使它被标记为 UICollectionViewCell 的子类并且以任何其他方式表现良好,这也阻止了事件通过。

    所以 - 如果您的自定义 UICollectionViewCell XIB 文件在根目录下看起来像这样(请参阅数据输入矩阵视图旁边的图标,这是我的 UICollectionViewCell 子类的名称),那么您将遇到同样的问题:

    我的解决方案是在 XIB 中添加一个适当的 UICollectionViewCell 类,然后将现有 Data Entry Matrix View 下的所有子视图移动到其中,删除旧根,然后重新连接 Outlets。最终结果如下所示:

    您可以看到使用的不同图标 - 这就是您想要的。一旦我像这样更改我的 XIB,事件就会通过。

    在原始的 XIB 文件中(查看为 Source),非工作版本引入了根元素为

    <view ...>
    

    而工作版本将根元素更改为

     <collectionViewCell ...>
    

    希望这可以为其他人节省几个小时...

    【讨论】:

    • 太棒了!如此容易犯的错误,而且很难发现。
    • 您,先生,成就了我的一个月。我不能告诉你这有多大帮助。谢谢!
    • 非常感谢你的帮助@patschiboy,你的记忆将永远成为 StackOverflow 的祝福
    • 你救了我的命!非常感谢你! :D
    【解决方案2】:

    我的自定义 UICollectionViewCell 中的 UIButton 有同样的问题

    将该功能添加到我的UICollectionViewCell 为我解决了问题:

    - (void)setBounds:(CGRect)bounds {
        [super setBounds:bounds];
        self.contentView.frame = bounds;
    }
    

    【讨论】:

      【解决方案3】:

      如果您在根目录有一个 view/scrollView 并且它附加到 backgroundViewselectedBackGroundView 删除它,它会正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多