我在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?感谢您在这方面的任何帮助,因为我被困在这里,不知道我错过了什么。
答案 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