接收到试图在集合视图中向标签添加文本的错误

问题描述 投票:0回答:1

[我正在尝试在集合视图中输入arrayOfValues [indexPath.item]作为textLabel的文本,但是在运行程序时提示“致命错误:索引超出范围”时收到错误,

我将如何解决此问题,以便用arrayOfValues中的信息填充collectionView单元格?

这里是代码。

import UIKit

class NetworkViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

@IBOutlet weak var firstCollectionView: UICollectionView!
@IBOutlet weak var secondCollectionView: UICollectionView!

let arrayOfOrganizations = ["My Network", "Find Connections", "ss"]
let arrayOfValues = [""]

override func viewDidLoad() {
    super.viewDidLoad()

}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if (collectionView == secondCollectionView) {
        return arrayOfOrganizations.count
    }
    return arrayOfValues.count
 }

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let firstCell = firstCollectionView.dequeueReusableCell(withReuseIdentifier: "firstCell", for: indexPath) as! FirstCollectionViewCell
    firstCell.textLabel.text = arrayOfValues[indexPath.item] //error on this line
    if (collectionView == secondCollectionView) {
        let secondCell = secondCollectionView.dequeueReusableCell(withReuseIdentifier: "secondCell", for: indexPath) as! SecondCollectionViewCell
        secondCell.backgroundColor = .black
        return secondCell
    }
    return firstCell
 }

}

class FirstCollectionViewCell: UICollectionViewCell {

@IBOutlet weak var textLabel: UILabel!

}

class SecondCollectionViewCell: UICollectionViewCell {

}
swift uicollectionview uicollectionviewcell
1个回答
0
投票

您遇到的问题是,无论collectionView如何,cellForItemAt函数的前两行都将被执行。因此,从本质上讲,您需要确保仅当collectionView == firstCollectionView时才执行与firstCollectionView相对应的代码块,对secondCollectionView也是如此。简而言之,您只需要将函数更改为此:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if (collectionView == secondCollectionView) {
        let secondCell = secondCollectionView.dequeueReusableCell(withReuseIdentifier: "secondCell", for: indexPath) as! SecondCollectionViewCell
        secondCell.backgroundColor = .black
        return secondCell
    } else {
         let firstCell = firstCollectionView.dequeueReusableCell(withReuseIdentifier: "firstCell", for: indexPath) as! FirstCollectionViewCell
         firstCell.textLabel.text = arrayOfValues[indexPath.item] //error on this line
         return firstCell
    }
 }
© www.soinside.com 2019 - 2024. All rights reserved.