如何使用CoreData从选定的集合视图单元格中获取标签文本?

时间:2017-03-19 14:13:40

标签: ios swift core-data uicollectionview

我正在尝试获取按下时集合视图单元格中的标签文本。我知道以常规方式执行它将涉及使用[indexPath.row]函数,但是集合视图的数组是使用CoreData。当我尝试使用[indexPath.row]时,它会说:"'下标'不可用:不能使用Int下标String,请参阅文档注释以供讨论。"这就是我的didSelect功能目前的样子:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellP", for: indexPath) as! CCCollectionViewCell
    id = cell.pLabel.text![Project.name]

    print(id)
}

我正在尝试将所选集合视图单元格标签中的文本保存到变量' id'。这是集合视图的声明:

var projectList : [Project] = []

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellP", for: indexPath) as! CCCollectionViewCell

    let project = projectList[indexPath.row]

    cell.pLabel?.text = project.name!

    //cell.tag = indexPath.row

    return cell
}

注意:Project是CoreData实体,name是属性。

有人知道在单元格被点击到“ID”时如何保存文本。变量?

2 个答案:

答案 0 :(得分:2)

你不应该在didSelectItemAt内将这样的新collectionViewCell出列。您正在寻找的函数是collectionView.cellForItem(at: indexPath),它返回被选中的单元格。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    guard let cell = collectionView.cellForItem(at: indexPath) as? CCCollectionViewCell else {
        // couldn't get the cell for some reason
        return 
    }

    id = cell.pLabel.text![Project.name] // ?

    print(id)
}

我不确定你在这里要做什么。您声明要将单元格的label.text保存到id变量中。为什么要尝试使用[Project.name]下标文本?

答案 1 :(得分:0)

理想情况下,您不应在您的单元格中展示IBOutlet。代替...

class CCCollectionViewCell: UICollectionViewCell {

    IBOutlet weak var pLabel: UILabel!

    var project: Project? {
        didSet {
            pLabel.text = project?.name       
        }
    }
}

然后在你的视图控制器中......

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellP", for: indexPath) as! CCCollectionViewCell
    cell.project = projectList[indexPath.row]
    return cell
}

和...

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    cell = collectionView.cellForRow(atIndexPath: indexPath) as! CCCollectionViewCell
    let project = cell.project

    print(project)
}

...或

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let project = projectList[indexPath.row]

    print(project)
}