设置协议和委托以从集合视图传输数据不起作用

时间:2015-03-21 08:29:38

标签: ios swift delegates uicollectionview protocols

我在Swift中创建了一个示例项目,它有一个按钮和一个ImageView作为布局。单击该按钮后,它将加载包含一堆图像的集合视图。我能够加载图像并知道它所在的索引。我想将此信息传递回原始视图控制器并将其显示在我的图像视图中。为此,我创建了一个协议:

protocol CollectionViewControllerDelegate {
    func logoCollectionViewController(controller: CollectionViewController, logoImage: UIImage)
}

此协议在我的CollectionViewController中定义:

class CollectionViewController: UICollectionViewController, UICollectionViewDelegate {

我也设置了我的代表:

var collectionViewDelegate : CollectionViewControllerDelegate?

这是我调用它的代码:

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    var imageName = defaultImageList[indexPath.row]
    selectedImage = UIImage(named: imageName)
    collectionViewDelegate?.logoCollectionViewController(self, logoImage: selectedImage)
    self.dismissViewControllerAnimated(true, completion: nil)
    println("Cell \(indexPath.row) selected")
}

在原始视图控制器上,

class ViewController: UIViewController, CollectionViewControllerDelegate {

我希望它符合协议并将函数定义为:

func logoCollectionViewController(controller: CollectionViewController, logoImage: UIImage) {
    logoView.image = logoImage
    print("Logo Loaded")
}

但是这个函数不会被调用。如何将ViewController的委托链接到将传递我在协议中定义的图像信息的CollectionViewController?感谢您在这方面的任何帮助,因为我被困在这里,不知道我错过了什么。

1 个答案:

答案 0 :(得分:0)

抱歉我的英文不好,在OS X应用程序中我会在ViewController的viewDidLoad中执行此操作或覆盖prepareForSegue:

let myVc = window!.contentViewController as! CollectionViewController
myVc.delegate = self

所以我很瘦,你得到了一些CollectionViewController实例,并将.delegate分配给self。虽然,我不知道如何在iOS-app中这样做。

这是我的旧答案同样的问题,但在OS X中my old answer