【发布时间】:2016-03-05 16:23:24
【问题描述】:
在细节视图控制器中,我在左上角有一个“featureImage”,下面是一条薄薄的水平图像条。图像条是由自定义 CollectionViewController 管理的嵌入式容器视图,它显示图像数组。初始的featureImage是images[0]数组中的第一个图像,同样的数组被传递给collection view。
如果容器视图中的单元格被选中/点击,我希望 featureImage 更新为相同的图像。
我想我需要调用委托方法 didSelectItemAtIndexPath,它会给我 indexPath。正确的?但是,我如何将已经来自委托的 indexPath 传递回详细视图控制器。
已编辑 - 代码显示了响应者链和委托方法之间的代码重叠和差异。在 didSelectItemAtIndex 路径中取消注释,响应者链方法有效,而委托方法无效。
协议定义并包含在 DetailViewController 的顶部(我似乎并不关心协议在哪个文件中,并且只输入到类以允许委托属性为“弱”)。两种方法都需要。
protocol FeatureImageController: class {
func featureImageSelected(indexPath: NSIndexPath)
}
class DetailViewController: UIViewController, FeatureImageController {
在自定义 UICollectionViewController 类中声明的委托属性。只需要委托方法。
weak var delegate: FeatureImageController?
在 DetailViewController 中启动的委托属性。只需要委托方法。
override func viewDidLoad() {
super.viewDidLoad()
let photoCollectionVC = PhotoCollectionVC()
photoCollectionVC.delegate = self as FeatureImageController ... }
集合视图控制器 didSelectItemAtIndexPath 方法中的响应者链(活动)或委托方法(已注释掉)。
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
if let imageSelector = targetForAction("featureImageSelected:", withSender: self) as? FeatureImageController {
imageSelector.featureImageSelected(indexPath)
}
// self.delegate?.featureImageSelected(indexPath)
}
DetailViewController 中的委托方法。两者都需要。
func featureImageSelected(indexPath: NSIndexPath) {
record?.featureImage = record?.images[indexPath.row]
self.configureView()
}
【问题讨论】:
-
随着评论的反转,在 collectionView 中,delegate?.featureImageSelected(indexPath) 和 delegate 都打印 nil;并且永远不会调用 DetailViewController 中的委托方法。
标签: ios objective-c swift uicollectionview uicontainerview