我在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中,我以前的回答