根据当前显示的 UICollectionViewCell 更改 UISegmentedControl.selectedIndex 值
Change UISegmentedControl.selectedIndex value depending on which UICollectionViewCell is currently shown
如何根据当前显示的 UICollectionViewCell 更改 UISegmentedControl.selectedIndex 值?
我的 collectionView 将 isPagingEnabled 设置为 true,我可以根据我的 UISegmentedControl 的 selected 索引轻松地 select 不同的项目,但我该怎么做相反?
是否有一个函数在每次用户更改 collectionView 的页面时调用,该函数还提供当前显示项目的 indexPath?
访问 visibleCells 数组似乎没有任何用处。
像
这样的函数
func collectionViewDidPage(_ collectionView: UICollectionView, _ fromIndexPath: IndexPath, _ toIndexPath: IndexPath) {
let tag = myCollectionView.cellForItem(at: toIndexPath).tag
self.segmentedControl.selectedSegmentIndex = tag
}
其中 fromIndexPath 和 toIndexPath 是两个单元格的索引路径(我开始滚动的那个和我正在滚动的那个将结束滚动)可以工作。
我能做什么?
以下代码似乎运行良好:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
segmentedControl.selectedSegmentIndex = Int(pageNumber)
}
如何根据当前显示的 UICollectionViewCell 更改 UISegmentedControl.selectedIndex 值? 我的 collectionView 将 isPagingEnabled 设置为 true,我可以根据我的 UISegmentedControl 的 selected 索引轻松地 select 不同的项目,但我该怎么做相反?
是否有一个函数在每次用户更改 collectionView 的页面时调用,该函数还提供当前显示项目的 indexPath?
访问 visibleCells 数组似乎没有任何用处。 像
这样的函数func collectionViewDidPage(_ collectionView: UICollectionView, _ fromIndexPath: IndexPath, _ toIndexPath: IndexPath) {
let tag = myCollectionView.cellForItem(at: toIndexPath).tag
self.segmentedControl.selectedSegmentIndex = tag
}
其中 fromIndexPath 和 toIndexPath 是两个单元格的索引路径(我开始滚动的那个和我正在滚动的那个将结束滚动)可以工作。
我能做什么?
以下代码似乎运行良好:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
segmentedControl.selectedSegmentIndex = Int(pageNumber)
}