我的viewController中有一个UILabel
变量:class AwardsViewController: UICollectionViewController
。 viewController的collectionView有一个适配器,它具有所有必需的集合视图函数,它们可以像这样连接:
@IBOutlet var awardsCollectionView: UICollectionView! // The collection view
private var adapter = AwardsCollectionAdapter() // The adapter
awardsCollectionView.dataSource = adapter
awardsCollectionView.delegate = adapter
当用户点击其中一个集合视图单元格时,我希望更改视图控制器中的UILabel
,即在此函数中:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
// ...change text of viewController's label
}
有没有人知道如何从适配器中的此函数中访问视图控制器内的变量?标签是以编程方式添加的,因此它不在故事板中,它只是作用于viewController类。
class AwardsViewController: UICollectionViewController {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
答案 0 :(得分:0)
所以我想我发现自己该怎么做。我在适配器中创建了一个label : UILabel!
变量,然后在控制器的viewDidLoad
中将adapter.label
设置为self.label
。从那时起,我可以在适配器的功能中操作该标签。
这比我想象的要困难得多,但现在我知道它是如何完成的。
答案 1 :(得分:0)
有很多方法可以做到这一点,就个人而言,你选择的是最糟糕的方法。您将适配器与视图控制器耦合:在接下来的将来,它们不能单独存在,您无法重用代码。 通过仅传递字符串来抽象数据通信,或者更好,表示该行的整个模型将更可重用。
您可以决定是使用NotificationCenter
,Delegate pattern
,closures
还是其他人。