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



我在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,该CollectionViewController将传递我在协议中定义的图像信息?谢谢你在这方面的帮助,因为我被困在这里,不确定我错过了什么。

很抱歉我的英语不好,在OS X应用程序中,我希望在您的ViewController的viewDidLoad或覆盖prepareForSegue:中这样做

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

因此,我认为您已经获得了CollectionViewController的一些实例,并将该.delete分配给self。不过,我不知道如何在iOS应用程序中做到这一点。

这是我以前的答案,但在OS X中,我以前的回答

最新更新