CollectionViewCell 顶部的按钮使 collectionView 停止滚动

Posted

技术标签:

【中文标题】CollectionViewCell 顶部的按钮使 collectionView 停止滚动【英文标题】:Button on top of CollectionViewCell stops collectionView from scrolling 【发布时间】:2018-01-22 20:36:56 【问题描述】:

我有一个collectionView,里面有一些单元格。 在每个单元格的顶部我都有一个按钮,所以当我按下按钮时,视图会切换到另一个控制器。

我现在的问题是,当我触摸单元格并尝试滚动时,它没有。 (因为它上面的按钮)

对于 UIScrollView 中的相同问题,有这个方法:

override func touchesShouldCancel(in view: UIView) -> Bool 
    // Makes the scrollView scrollable when there's a button on top.
    return true

我也试过这个方法:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    print("Nothing")

什么也没发生。

我该如何解决这个问题?

【问题讨论】:

你的意思是每个单元格内都有一个按钮?还是您的意思是每个单元格上方都有一个按钮,但该按钮不是单元格的子级? 我在每个单元格内都有一个按钮是的 【参考方案1】:

ViewControllerviewDidLoad() 方法中设置collectionView.canCancelContentTouches = true。我希望它能解决您的问题。

【讨论】:

【参考方案2】:

试试这个:

func viewDidLayoutSubviews() 

   super.viewDidLayoutSubviews()
   self.scroller.isScrollEnabled = true

根据 Mark Kennedy 的回答,这里:UIButton inside UIScrollView disables scrolling

【讨论】:

抱歉,我忘了说问题出现在 collectionView 单元格内的 collectionView 中。 我想我必须重写我的问题【参考方案3】:

在 Button tap 方法中检查 CollectionView 是否正在滚动。像这样

if collectionView.isDragging || collectionView.isDecelerating 
 //`Don't go to Another View Controller`

试一试。

【讨论】:

以上是关于CollectionViewCell 顶部的按钮使 collectionView 停止滚动的主要内容,如果未能解决你的问题,请参考以下文章

自定义 CollectionViewCell 处理按钮按下

单击 CollectionViewCell 中的按钮

collectionViewCell 中的按钮不触发功能

如何使 jqgrid 顶部工具栏自定义按钮像标准按钮一样大

以编程方式添加到 collectionviewcell 时未启用按钮

按下 CollectionViewCell 内的按钮后如何呈现 ViewController