2017-10-10 103 views
0

我有一个UICollectionView,它有它的单元格,正常情况下。UICollectionView isUserInteractionEnabled阻止单元格交互

其中每个单元格都有一个UICollectionViewController

当我点击一个细胞,我展开它以适应窗口的屏幕,但是我在这里遇到了一些问题:

如果我滚动增殖的细胞内,整个屏幕滚动;

我正在试图阻止superview集合视图点击和滚动。

为了做到这一点,扩大了选择的单元格,以适应所需的帧后,我设置collectionView.isScrollEnabled = falsecollectionView.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(:_)

任何提示? 谢谢。

+0

你可以尝试像这个家伙一样在你的单元格后面添加子视图:https://stackoverflow.com/a/5404921/8374624 –

+0

@JakobMygind是的,这也是一个不错的方法。我刚才记得的就是添加一些东西,比如'hasCellExpanded = false',并且当一个单元格被展开时,我将它设置为true,并且在'didCreateItemAtIndexPath(_ :)',如果'hasCellExpanded == true'我简单地返回。 –

回答

0

如果设置userInteractionEnabled = false那么你可以不使用任何子视图交互。它是不够的,只是禁用滚动?

如尝试删除self.collectionView.isUserInteractionEnabled = false 从你的完成块?

+0

我试过了,但那会导致另一个问题。当我扩展单元格以适应框架时,它将位于其他单元格之上,如果单击扩展单元格的中心,它可以从超级视图中触发另一个“didSelectItem” –

+0

哦......我只记得我可以创建一个属性,在任何单元格触摸的情况下返回,如果一个扩展。 –