如何获取指定单元格周围的单元格索引?

时间:2017-10-02 14:43:28

标签: ios swift uicollectionview

在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
    }

2 个答案:

答案 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;基于行和列数组中的单元索引的单元格,您需要:

  1. 将细胞直接放在它上方,并将细胞放在该细胞的左右两侧
  2. 将单元格放在指定单元格的左侧和右侧
  3. 将细胞直接放在其下方,并将细胞放在该细胞的左右两侧
  4. 对于边界处理:

    • 如果单元格位于顶行,请不要尝试将单元格放在上方,如果单元格位于底行,则不要尝试将单元格放在下面
    • 如果单元格位于第一列,请不要尝试将单元格放在左侧,如果单元格位于最后一列,则不要尝试将单元格置于右侧

    当你在代码中解决这个问题时,请记住索引是基于零的...所以在你的3x3示例中,你的索引是0到8,而不是1到9。