从适配器改变viewController变量?

时间:2016-11-22 07:41:21

标签: ios swift

我的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))

2 个答案:

答案 0 :(得分:0)

所以我想我发现自己该怎么做。我在适配器中创建了一个label : UILabel!变量,然后在控制器的viewDidLoad中将adapter.label设置为self.label。从那时起,我可以在适配器的功能中操作该标签。

这比我想象的要困难得多,但现在我知道它是如何完成的。

答案 1 :(得分:0)

有很多方法可以做到这一点,就个人而言,你选择的是最糟糕的方法。您将适配器与视图控制器耦合:在接下来的将来,它们不能单独存在,您无法重用代码。 通过仅传递字符串来抽象数据通信,或者更好,表示该行的整个模型将更可重用。

您可以决定是使用NotificationCenterDelegate patternclosures还是其他人。