UITableViewController 作为 ChildViewController 不调用委托方法

Posted

技术标签:

【中文标题】UITableViewController 作为 ChildViewController 不调用委托方法【英文标题】:UITableViewController as ChildViewController not calling delegate methods 【发布时间】:2014-11-29 15:56:23 【问题描述】:

我有一个 UITableViewController ,当我将它用作“初始视图控制器”时,它可以完美运行。 现在,我将它用作另一个视图控制器的“子视图控制器”,但是现在当我尝试选择一行时,不会调用“didSelectRow”方法,而当我长按同一行时,“didSelectRow”方法被调用。 我已经在 SO 上解决了几乎所有关于 UITableviewController 的问题,但直到现在我还没有找到任何解决这个问题的方法。

我正在使用 XCode 6,以下代码用于将其添加为子视图控制器

[self addChildViewController:vc];
[self.ringtoneView addSubview:vc.view];
[vc didMoveToParentViewController:self];

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

终于我设法解决了这个问题,感谢这个答案 https://***.com/a/18159463/3632958

我在父视图控制器中错误地添加了一个点击手势识别器,这阻止了表格视图上的正常选择。

【讨论】:

【参考方案2】:

当你调用方法时

[self addChildViewController:vc];

您只需告诉父母视图控制器转发外观和方向方法,例如

viewWillAppear: viewDidAppear: viewWillDisappear: viewDidDisappear: willRotateToInterfaceOrientation:duration: willAnimateRotationToInterfaceOrientation:duration: didRotateFromInterfaceOrientation:

所以我认为最好创建一个 UITableView 并将您的父母视图控制器分配为 tableview 的委托和数据源。所以你的视图控制器需要采用 UITableViewDelegate 协议和 UITableViewDataSource。

【讨论】:

这可行,但我不想这样,问题是为什么 UITableViewController 在添加为 childViewController 时无法按预期工作。 好的,那我想你需要把 [self addChildViewController:vc];和 [self.ringtoneView addSubview:vc.view];在您的父母视图控制器的 viewdidAppear 方法中。 [vc didMoveToParentViewController:self];没用。 我不是在 viewDidLoad 上添加 childViewController,而是在满足某些条件时在运行时动态添加

以上是关于UITableViewController 作为 ChildViewController 不调用委托方法的主要内容,如果未能解决你的问题,请参考以下文章

将 xib 文件作为 UITableViewController 中的标头添加到 UITableView

UITableViewController 作为小视图中的子视图控制器 - 键盘问题

如果弹出框作为模型呈现,UITableViewController 将失去滚动功能

如何将 segmentedControl 和 UISearchController 作为 UITableViewController 标头? (以编程方式)

在 uiviewcontroller 中添加 uitableviewcontroller 作为子视图时出错

UITableViewController 子视图:告诉 pushViewController 拥有 UIViewController