Преобразование IndexPath.row в 2D-массив - PullRequest
0 голосов
/ 17 марта 2019

У меня есть массив, который я использую для создания сетки с использованием представления коллекции.Чтобы предоставить numberOfItemsInSection в collectionView, я делаю row.count * row.count, чтобы получить сетку 8x8 и 64 ячейки.Моя проблема в том, что я хочу иметь возможность получать доступ к этим ячейкам и манипулировать ими через их строки и столбцы, а не indexPath.row.

Поэтому, если я хочу 5-ю ячейку, вместо получения # 4 в IndexPath.row, я хочу иметь возможность: row [0] [4].Любые предложения о том, как преобразовать IndexPath.row в 2D-массив?

var row = [[Int]]()
let column: [Int]

init() {
    self.column =  [1, 2, 3, 4, 5, 6, 7, 8] 
}

func createGrid() {
    for _ in 1...8 {
        row.append(column)
    }
}

синие квадраты / ячейки - это ячейки, для которых я хочу строку и столбцы для

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Почему бы не просто 8 секций с 8 строками, для этого IndexPath предназначен

var grid = [[Int]]()

override func viewDidLoad() {
    super.viewDidLoad()
    for _ in 0..<8 {
        grid.append([0,1,2,3,4,5,6,7])
    }
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return grid.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return grid[section].count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CollectionViewCell
    cell.label.text = "\(indexPath.section)/\(indexPath.row)"
    return cell
}

enter image description here

0 голосов
/ 17 марта 2019

Следующее должно сделать это.

row[indexPath.row / 8][indexPath.row % 8]
...