【问题标题】:CollectionView with UIScrollView as a cell以 UIScrollView 作为单元格的 CollectionView
【发布时间】:2017-04-25 19:19:06
【问题描述】:

我正在尝试在每个单元格中实现一个带有 uiscrollview 的集合视图,每个滚动视图中都有一些照片。

CollectionView 可垂直滚动,每个单元格可水平滚动。

注意:图片是可点击的按钮!

我想这样做:

如果用户单击任何单元格中的图像,它应该展开并显示为集体视图上的弹出窗口。检查哪个按钮被按下变得相当困难。有没有更简单的解决方案来观察点击及其来源?

【问题讨论】:

    标签: ios iphone swift uiscrollview uicollectionview


    【解决方案1】:

    如果你使用 Target-Action 方法来处理点击,你可以简单地传递一个带有参数的选择器

    @objc func handleButtonTap(_ button: UIButton)

    button 这里是对点击按钮的引用。

    您可以使用以下方法将目标添加到您的按钮:

    button.addTarget(self, action:#selector(handleButtonTap), for: .touchUpInside)

    编辑:

    如果您想检查 IndexPath,您可以在选择器中提供额外的参数 forEvent: UIEvent 并将此事件与以下扩展一起使用

    extension UICollectionView {
    
        func indexPath(forEvent: UIEvent) -> IndexPath? {
           return forEvent.allTouches?
               .first
               .map  { $0.location(in: self) }
               .flatMap { indexPathForItem(at: $0) }
         }
    }
    

    【讨论】:

    • 感谢您的快速回答。我还考虑了选择器。使用选择器,我可以找到准确单击了哪个按钮。但是,我怎么知道这个按钮的位置呢?我的意思是,集合视图中的行和 uiscrollview 中的数字(?)?
    • 我正在考虑自定义一个按钮。也许,我需要创建某种 UIButtonX,它可以添加额外的参数,然后由选择器读取。但我认为仍然不是最好的方法。
    • 或者最简单的方法是给每个按钮添加一个标签。但是,应该有更好的解决方案。
    • 我将在一秒钟内编辑我的答案,以提供一种获取 indexPath 的方法
    • 感谢您的编辑。但是,恐怕这并不是我想要的。
    猜你喜欢
    • 2014-06-23
    • 1970-01-01
    • 2018-11-15
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多