如何触发集合视图的 didSelectItemAtIndexPath: 在滚动时点击?
Posted
技术标签:
【中文标题】如何触发集合视图的 didSelectItemAtIndexPath: 在滚动时点击?【英文标题】:How do I trigger a collection view's didSelectItemAtIndexPath: on tap while it's scrolling? 【发布时间】:2016-07-26 19:07:00 【问题描述】:集合视图处于中间滚动时的默认行为:
点击 #1:停止滚动 点击#2:触发didSelectItemAtIndexPath
集合视图处于中滚动状态时我想要什么:
点击#1:触发didSelectItemAtIndexPath
什么是实现这一目标的干净、正确的方法? FWIW,我意识到这可能是意想不到的行为。
【问题讨论】:
【参考方案1】:我认为最好的方法是使用 UICollectionView addGestureRecognizer 添加触摸手势识别器,然后处理触摸手势(例如,在集合视图中获取触摸位置,使用它来获取被触摸项目的 indexPath,然后自己调用 collectionView.didSelectItemAtIndexPath )。至于滚动,您可以使用 UISrollViewDelegate 方法在滚动开始后禁用集合视图上的用户交互,然后在滚动停止和/或在 viewDidDisappear 视图控制器函数中重新启用集合视图上的用户交互。
像这样:
公共类 MyViewController: UIViewController
@IBOutlet 弱变量 collectionView: UICollectionView!
var collectionViewTap:UITapGestureRecognizer?
覆盖公共函数 viewDidLoad()
collectionViewTap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
self.view.addGestureRecognizer(collectionViewTap!)
覆盖 public func viewDidDisappear(animated: Bool)
collectionView.userInteractionEnabled = true
func handleTap (sender:UITapGestureRecognizer)
let touchPoint = sender.locationOfTouch(0, inView: collectionView)
let indexPath = collectionView.indexPathForItemAtPoint(touchPoint)
if (indexPath != nil)
collectionView(collectionView, didSelectItemAtIndexPath: indexPath!)
public func scrollViewWillBeginDragging(scrollView: UIScrollView)
collectionView.userInteractionEnabled = false
public func scrollViewDidEndDecelerating(scrollView: UIScrollView)
collectionView.userInteractionEnabled = true
【讨论】:
我不敢相信这没有很多赞,反应很好!以上是关于如何触发集合视图的 didSelectItemAtIndexPath: 在滚动时点击?的主要内容,如果未能解决你的问题,请参考以下文章
didSelectItemAt 在 SCLAlertView 中不起作用
如何触发集合视图的 didSelectItemAtIndexPath: 在滚动时点击?