UICollectionView isUserInteractionEnabled阻止单元格交互
我有一个UICollectionView
,它有它的单元格,正常情况下。UICollectionView isUserInteractionEnabled阻止单元格交互
其中每个单元格都有一个UICollectionViewController
。
当我点击一个细胞,我展开它以适应窗口的屏幕,但是我在这里遇到了一些问题:
如果我滚动增殖的细胞内,整个屏幕滚动;
我正在试图阻止superview集合视图点击和滚动。
为了做到这一点,扩大了选择的单元格,以适应所需的帧后,我设置collectionView.isScrollEnabled = false
和collectionView.isUserInteractionEnabled = false
,但这个我碰到另一个问题,就是来了:增殖的细胞不与任何触摸交互。
我该如何做到这一点?展开单元格并阻止滚动视图滚动,阻止滚动视图交互,但启用单元互动(滚动点击等)?
这里的一些代码:
主进给控制器
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? FeedCell else { return }
let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath)
let cellFrameInSuperview:CGRect = collectionView.convert(theAttributes.frame, to: collectionView)
cell.superview?.bringSubview(toFront: cell)
cell.backupFrame = cellFrameInSuperview
let newFrame = CGRect(x: 0, y: collectionView.contentOffset.y, width: view.frame.width, height: view.frame.height)
UIView.animate(withDuration: 0.2, animations: {
cell.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
}) { (_) in
UIView.animate(withDuration: 0.1, animations: {
cell.transform = CGAffineTransform(scaleX: 1, y: 1)
}, completion: { (_) in
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.7, options: .curveEaseInOut, animations: {
cell.frame = newFrame
},completion: {(_) in
cell.presentDismissButton()
self.collectionView.isScrollEnabled = false
self.collectionView.isUserInteractionEnabled = false
})
})
}
}
扩增的细胞驳回按钮属性
@objc func dismiss() {
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 1, options: .allowAnimatedContent, animations: {
self.frame = self.backupFrame!
self.sendSubview(toBack: self)
self.dismissButton.alpha = 0
},completion: nil)
}
在驳回属性我可以设置上海华相互作用如再次启用,但与扩展框架我不能互动与它一起。
我在这里有一个问题,如果我不禁用主饲料collectionView交互是当我点击扩展单元格上的任何地方它将展开另一个单元格(它是我的扩展单元后面, didSelectItem(:_)
任何提示? 谢谢。
如果设置userInteractionEnabled = false
那么你可以不使用任何子视图交互。它是不够的,只是禁用滚动?
如尝试删除self.collectionView.isUserInteractionEnabled = false
从你的完成块?
我试过了,但那会导致另一个问题。当我扩展单元格以适应框架时,它将位于其他单元格之上,如果单击扩展单元格的中心,它可以从超级视图中触发另一个“didSelectItem” –
哦......我只记得我可以创建一个属性,在任何单元格触摸的情况下返回,如果一个扩展。 –
你可以尝试像这个家伙一样在你的单元格后面添加子视图:https://stackoverflow.com/a/5404921/8374624 –
@JakobMygind是的,这也是一个不错的方法。我刚才记得的就是添加一些东西,比如'hasCellExpanded = false',并且当一个单元格被展开时,我将它设置为true,并且在'didCreateItemAtIndexPath(_ :)',如果'hasCellExpanded == true'我简单地返回。 –