子 ViewController 不调用父类中声明的委托方法

Posted

技术标签:

【中文标题】子 ViewController 不调用父类中声明的委托方法【英文标题】:child ViewController doesn't call delegate methods declared in parent class 【发布时间】:2017-09-07 10:19:11 【问题描述】:

我有一个父类:GroupsViewController。这个类中有一个 UICollectionView 插座,它在情节提要中与它的子类NearbyGroupViewController 中的 UICollectionView 连接。所有委托方法都在父类GroupsViewController 中实现。问题是当NearbyGroupViewController 打开时,委托方法永远不会被调用。我做错了什么?

class GroupsViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 
    @IBOutlet weak var collectionView: UICollectionView
    ...


class NearbyGroupViewController: GroupsViewController 

【问题讨论】:

【参考方案1】:

通过编程方式(像这样)或通过 Interface Builder 将您的 GroupsViewController 连接UICollectionViewDelegateUICollectionViewDataSource

self.collectionView.delegate = self
self.collectionView.datasource = self

编辑:

问题是当 NearbyGroupViewController 打开时,委托方法永远不会被调用。我做错了什么?

您的NearbyGroupViewController 还需要连接到UICollectionView 的委托和数据源。

【讨论】:

是的,我的错。谢谢。【参考方案2】:

您是否尝试过在父类本身中实现委托方法?

【讨论】:

【参考方案3】:

你必须设置delegate = self(NearbyGroupViewController 的实例)

意味着当您在父视图控制器 (GroupsViewController) 中创建子视图控制器 (NearbyGroupViewController) 的实例时,您必须设置此 delegate

let targetVC: NearbyGroupViewController = self.storyboard!.instantiateViewController(withIdentifier: "NearbyGroupViewController") as! NearbyGroupViewController
targetVC.delegate = self
self.navigationController!.pushViewController(targetVC, animated: true)

在上面的示例中,您必须在情节提要文件中设置 storyboard identifier"NearbyGroupViewController"

【讨论】:

【参考方案4】:

试试这个代码

let parent = GroupsViewController()

那就用

parent.title = ""

【讨论】:

以上是关于子 ViewController 不调用父类中声明的委托方法的主要内容,如果未能解决你的问题,请参考以下文章

方法重写

从另一个类创建超级视图的子视图不起作用

方法的重写

从SuperView的ViewController外部的类调用时,willRemoveSubview不会删除子视图吗?

第五周课程总结&试验报告

C++父类中声明了一个虚函数以后 是否在子类 以及子类的子类中 都要声明并重写这个函数?