从不同的班级

时间:2016-05-20 23:31:20

标签: ios swift swift2 uitextfield uicontainerview

我的目标是可以从容器视图中的UICollectionViewCell配置标签。

我有一个带有UICollectionView的视图控制器,如果我双击其中一个单元格,则会打开一个容器视图。这已经有效,但我在UITextField内有一个ContainerViewController,它应该更新nameLabel的{​​{1}}。

如何从ItemCellcontainerController获取文字属性?

ItemCell func changeName()

显然这个功能不起作用。

class ItemCell: UICollectionViewCell {
    @IBOutlet weak var nameLabel: UILabel!

    func changeName() {
        nameLabel.text = containerController.nameField.text
    }
}

1 个答案:

答案 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中输入的文本将更新集合视图的数据源,然后应用程序将重新加载该单元格。按照现在的方式,一旦单元格被重用,文本将恢复为数据源所说的内容。需要考虑的事情。