我正在尝试获取按下时集合视图单元格中的标签文本。我知道以常规方式执行它将涉及使用[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”时如何保存文本。变量?
答案 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)
}