我的目标是可以从容器视图中的UICollectionViewCell
配置标签。
我有一个带有UICollectionView
的视图控制器,如果我双击其中一个单元格,则会打开一个容器视图。这已经有效,但我在UITextField
内有一个ContainerViewController
,它应该更新nameLabel
的{{1}}。
如何从ItemCell
到containerController
获取文字属性?
ItemCell func changeName()
显然这个功能不起作用。
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName() {
nameLabel.text = containerController.nameField.text
}
}
答案 0 :(得分:0)
双击单元格时,将抽头单元格的引用传递给ContainerController
,然后让ContainerController
实例调用单元格上的changeName
函数。我建议改变changeName
函数以接受String
,如此:
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName(newName: String) {
nameLabel.text = newName
}
}
您可以做的一件事就是向您的ContainerController
添加一个属性,如下所示:
weak var textCell: ItemCell?
然后还更改ItemCell
中的方法以获取String
:
func changeName(newName: String) {
nameLabel.text = newName
}
然后在handleTap(_:)
方法中,您要检索单元格并调用openContainer()
,请将其更改为:
if let index = indexPath,
let cell = ItemCollection.cellForItemAtIndexPath(index) as? ItemCell {
container.textCell = cell
openContainer()
} else {
print("Could not find index path or cell")
}
然后在ContainerController
中,输入文字后,使用新文字致电textCell?.changeName(_:)
。
我还想添加我建议不要这样做。理想情况下,用户在ContainerController
中输入的文本将更新集合视图的数据源,然后应用程序将重新加载该单元格。按照现在的方式,一旦单元格被重用,文本将恢复为数据源所说的内容。需要考虑的事情。