UICollectionView 滚动到索引处的项目
UICollectionView scroll to item at Index
我已成功滚动索引处的项目,例如如果用户点击一个按钮,它将转到最后一项
这是我用过的代码
self.collection.scrollToItemAtIndexPath(NSIndexPath(forItem: self.array.count - 1, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.Top, animated: true)
但我的问题是如何知道用户是在 UICollectionView
的底部还是顶部?
我可以通过创建 2 个函数来做到这一点,如果用户点击顶部 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) 所以如果用户 selects 项目 9, 9 > 4 true up else down.
我相信只有当用户 select 是一个项目时此代码才能正常工作,但我需要一种不使用 indexPath.row
的替代方法,因为我们假设用户没有 select 任何项目...所以此代码将不起作用....
如果您支持 iOS 8.0
optional func collectionView(_ collectionView: UICollectionView,
willDisplayCell cell: UICollectionViewCell,
forItemAtIndexPath indexPath: NSIndexPath)
这个新的 API 已完全使用,因此只需将您的代码从 didSelectItemAtIndexPath
移至此方法,您的代码就可以完美运行,因为它每次都会调用并在此处检查您的 indexpath.row
。让我知道是否有帮助。
我已成功滚动索引处的项目,例如如果用户点击一个按钮,它将转到最后一项
这是我用过的代码
self.collection.scrollToItemAtIndexPath(NSIndexPath(forItem: self.array.count - 1, inSection: 0), atScrollPosition: UICollectionViewScrollPosition.Top, animated: true)
但我的问题是如何知道用户是在 UICollectionView
的底部还是顶部?
我可以通过创建 2 个函数来做到这一点,如果用户点击顶部 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) 所以如果用户 selects 项目 9, 9 > 4 true up else down.
我相信只有当用户 select 是一个项目时此代码才能正常工作,但我需要一种不使用 indexPath.row
的替代方法,因为我们假设用户没有 select 任何项目...所以此代码将不起作用....
如果您支持 iOS 8.0
optional func collectionView(_ collectionView: UICollectionView,
willDisplayCell cell: UICollectionViewCell,
forItemAtIndexPath indexPath: NSIndexPath)
这个新的 API 已完全使用,因此只需将您的代码从 didSelectItemAtIndexPath
移至此方法,您的代码就可以完美运行,因为它每次都会调用并在此处检查您的 indexpath.row
。让我知道是否有帮助。