在CollectionView中,我希望在压缩单元格周围获取所有单元格的indexPath.row。
我曾尝试获取按下的单元格的位置,然后使用collectionView.indexPathForItem(at: CGPoint)
获取其他单元格的indexPath,但此解决方案效果很好,但由于collectionView重用单元格,因此除了屏幕外的那些单元格。
现在我只想通过indexPath来获取它们,假设collectionView有3行和3个cols:
1 2 3
4 5 6
7 8 9
按下每个数字并获取其周围的所有其他索引:顶部,左侧,右侧,底部,左上角,右上角,左下角,右下角。如果数字没有全部位置,请忽略它。例如,数字1没有左,上,左上和左下。
let cellsPerRow = 3
let t = pressedCell.index - 3
if t >= 0{
top = t
}
let b = pressedCell + 3
if b <= 9{
bottom = b
}
上面的代码只能获得顶部和底部的索引,我也尝试使用pressedCell.index%cellsPerRow
来获取其他的索引,但是失败了。
任何人都可以提出解决这个问题的想法吗?
感谢。
最后使用以下代码
var indexArroundDict = [String:Int]()
let top = index - cellsPerRow
if top >= 0 {
indexArroundDict["top"] = index - cellsPerRow
}
let b = index + cellsPerRow
if b < totalCellArr.count {
indexArroundDict["bottom"] = b
}
if index%cellsPerRow != 0 {
indexArroundDict["left"] = index - 1
}
if index%cellsPerRow != cellsPerRow-1 {
indexArroundDict["right"] = index + 1
}
答案 0 :(得分:0)
这应该可以解决问题:
let cellsPerRow = 3
let numberOfRows = 3
let index = pressedCell.index
if index > cellsPerRow {
top = index - cellsPerRow
}
if index < (numberOfRows - cellsPerRow) {
bottom = b
}
if index%cellsPerRow != 1 {
left = index -1
}
if index%cellsPerRow != 0 {
right = index + 1
}
答案 1 :(得分:0)
从逻辑上思考。
获得&#34;接壤&#34;基于行和列数组中的单元索引的单元格,您需要:
对于边界处理:
当你在代码中解决这个问题时,请记住索引是基于零的...所以在你的3x3示例中,你的索引是0到8,而不是1到9。