将 UITableViewController 添加到其他视图

Posted

技术标签:

【中文标题】将 UITableViewController 添加到其他视图【英文标题】:Add UITableViewController to other View 【发布时间】:2012-12-25 17:55:24 【问题描述】:

是否可以通过编程方式将 UITableViewController 嵌入(添加为子视图)到另一个视图控制器中?我在 *** 上找到了一些答案,但没有一个对 ARC 和 ios6 SDK 有用。

我知道您可以使用 Navigation 和 TabBar 控制器轻松地做到这一点,但我对将 tableviews 添加到常规 View 控制器更好奇。我需要我的 tableview 占据可用屏幕空间的下半部分(我需要将其余部分用于其他目的,标签和导航类型都不适合)。

但是,当我尝试这样做时,它不起作用。我实例化了一个子类 UITableViewController,但是当我将它作为子视图添加到我的 self.view 中时,编译器说我试图使用“不兼容的指针类型”。不仅如此,我实例化的 UITableViewController 没有 .frame 属性,所以我无法设置它的尺寸,这将是本练习的重点。

【问题讨论】:

自 iOS5 以来,视图控制器嵌套非常好。在 WWDC(我认为是 10 个)集合中有一个很棒的视频。 【参考方案1】:

基于 ogres 的回答,您应该将 tableViewController 的视图添加为子视图,但这并不是全部。 tableViewController 是一个 viewController,它需要知道它的父级和子级,才能正确地完成它的 viewController-job。我不知道这里有什么细节,但是 WWDC 2011 上有一个完整的讨论,叫做"Implementing UIViewController Containment"。

仅将视图添加为子视图时,我遇到的一个问题是目标操作似乎不起作用。点击UIButton 或类似会导致EXC_BAD_ACCESSunrecognized selector sent to instance

所以我建议你这样做:

UIViewController *vc = //Your tableViewController
[self addChildViewController:vc]; //Important
[self.view addSubview:vc.view];

//If you want to set the frame, set the frame of the tableViewController's view
vc.view.frame = ...

【讨论】:

【参考方案2】:

是的,您可以在另一个视图中使用 tableview 没有任何问题

UITableViewController,但是当我将它作为子视图添加到我的 self.view 时

您是否尝试将 viewcontroller 添加为子视图或其视图? (viewcontroller.view)

UITableViewController 没有 .frame 属性,

当然它没有 .frame 属性,它是一个视图控制器,你应该看到 .view.frame

【讨论】:

该死,这样的菜鸟错误。 :)

以上是关于将 UITableViewController 添加到其他视图的主要内容,如果未能解决你的问题,请参考以下文章

我想通过在 Swift 中以编程方式将 UINavigationController 与 UITableViewController 嵌入 UITableViewController 这是 UITab

手动将 UITabBar 添加到 UITableViewController

将 UITableViewController 插入其他 UIView

将 NSMutableArray 传递给 UITableViewController

如何将 UITableViewController 创建为可重用模块?

将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController