Как заполнить 2D-массив на CollectionView? - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время у меня есть двумерный массив из 10 строк и 10 столбцов, и я хотел бы распечатать его, используя представление коллекции, для внешнего интерфейса.Однако я могу только получить данные из моей первой строки в моем 2D-массиве в виде коллекции.Я хотел бы получить все строки.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? WordSearchTableViewCell, let columns = grid.first?.count{
    //print(columns)
    let item = CGFloat(indexPath.item)
    //print("item: ", item)
    let row = floor(item / CGFloat(columns))
    //print("row: " , row)

    let column = item.truncatingRemainder(dividingBy: CGFloat(columns))
    print("column: ",column)

    //setCharacter
    cell.charLabel.text = grid[Int(row)][Int(column)]
    return cell
    }
    print("error")
    return WordSearchTableViewCell()
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Мне удалось решить свой вопрос.Итак, одна ошибка, которую, я думаю, я совершил, заключалась в том, что я возвращал только одну строку вместо 10, поэтому необходимо иметь numberOfSections.So, даже если результат был в состоянии отобразиться, недостаточно collectionviewCell.

Для процесса зацикливания я установил счетчик, который отслеживает номер строки каждый раз, когда столбец достигает последнего элемента массива для этой строки, будет увеличение.

Не уверен, что мое объяснение было правильным.

var counter: Int = 0

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

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

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? WordSearchTableViewCell, let columns = grid.first?.count{

        let item = indexPath.item
        let row : Int = counter
        let column : Int = Int(CGFloat(item).truncatingRemainder(dividingBy: CGFloat(columns)))

        //rowNum + 1 each time reaches last item of column
        if column == 9 {
            counter = counter + 1
        }

    //setCharacter
    cell.charLabel.text = grid[row][column]
    return cell
    }

    print("error")
    return UICollectionViewCell()
}
0 голосов
/ 06 февраля 2019

попробуйте это:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? WordSearchTableViewCell, let columns = grid.first?.count{
    let item = indexPath.item
    let row : Int = item / numberOfRows+1 //11 in your case
    let column : Int = item % numberOfColumns+1 //11 in your case
    cell.charLabel.text = grid[row][column]
    return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...