UICollectionView滚动到索引

时间:2015-06-30 20:40:46

标签: xcode swift uicollectionview

我已成功在索引处滚动项目,例如如果用户点击一个按钮,它将转到最后一个项目

这是我用过的代码

 self.collection.scrollToItemAtIndexPath(NSIndexPath(forItem: self.array.count - 1, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.Top, animated: true) 

但我的问题是如何知道用户是在UICollectionView的底部还是顶部?

我可以通过创建2个函数来实现这一点,如果用户点击TOP UIButton它会上升,反之亦然......

但我只想用一个UIButton来做这件事。因此,如果用户按下按钮,代码应该知道用户是否在底部并且向上,反之亦然。 我查看了UICollectionView处的每个功能,但似乎不是return用户所在的项目。

我想到了一些在逻辑上可能正确的东西

var someBool: Bool!

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
 let tempIndex: Int = self.array.count / 2 

 if indexPath.row > tempIndex{
   someBool = true // UP
 } else {
  someBool = false // Down
 }
 ...
}

@IBAction func buttonPressed{
   if someBool{
     self.collection.scrollToItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.Top, animated: true) 
   } else {
     self.collection.scrollToItemAtIndexPath(NSIndexPath(forItem: self.array.count - 1, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.Top, animated: true) 
   }
}

这意味着我们假设一个数组有9个元素/ 2 = 4(INT),所以如果用户选择项9,9> 4真实地向下去。

我相信这个代码只有在用户选择一个项目时才能正常运行,但是我需要一种不使用indexPath.row的替代方法,因为我们假设用户没有选择任何项目......所以这个代码赢了工作......

1 个答案:

答案 0 :(得分:6)

如果您支持 iOS 8.0

optional func collectionView(_ collectionView: UICollectionView,
             willDisplayCell cell: UICollectionViewCell,
          forItemAtIndexPath indexPath: NSIndexPath)

这个新API已经完整使用,因此您的代码将完美地运行,只需将代码从didSelectItemAtIndexPath移至此方法,因为它每次都会调用并在此处检查您的indexpath.row。让我知道它是否有帮助。