如何在 UIViewController 中显示 UITableView?

Posted

技术标签:

【中文标题】如何在 UIViewController 中显示 UITableView?【英文标题】:How to show UITableView inside UIViewController? 【发布时间】:2011-10-20 11:29:32 【问题描述】:

我正在从 UITableViewController 推送 detailViewController (UIViewController)。 detailViewController 由 UITextView 和小的 UITableView 组成。我已将 detailViewController 设置为实现 UITableViewDataSource 和 UITableViewDelegate 协议的 UIViewController。我在 IB 中有委托和数据源出口。我有那些在 detailViewController 被推到顶部时调用的必需的表委托和数据源方法。我被称为设置节数 (1) 和节 (2) 中的行数的方法。问题是当 detailViewController 位于顶部时,我在屏幕上看不到我的 tableView。

我注意到 Xcode 在 detailViewController 中警告我关于 initWithStyle 它可能不会响应 [super initWithStyle:style]:

- (id)initWithStyle:(UITableViewStyle)style
  self = [super initWithStyle:style];
  if (self) 
    // Custom initialization
  
  return self;
 

我知道它不属于 UIViewController 但如何解决?

更新:看来我的 tableView 已缩小。我在 IB 中为它设置了足够的高度和宽度,但看起来 tableView 以非常窄的一行出现在屏幕上,并且当表格填满行时它不会调整大小。恕我直言,它在某种程度上与无法调用 initWithStyle 有关。有没有人以其他方式实现了类似的解决方案?

【问题讨论】:

【参考方案1】:

正如您所说,detailViewControllerUIViewController 的子类。 UIViewController 没有实现-initWithStyle:,所以警告是合法的。

你不能从UITableViewController继承detailViewController吗?

如果您必须使用UIViewController,则必须在detailedViewController 中创建tableView 插座,并且它应该连接到您在IB 中的表。你确定它已经完成了吗?

【讨论】:

不,我不能。我需要在 navigationController 堆栈上推送 detailViewController。只有 UIViewController 可能被推到顶部。 UITableViewControllerUIViewController 的子类,因此您可以毫无问题地将其推送到导航控制器上。 如果我在 detailViewController @interface 声明中将父类从 UIViewController 更改为 UITableViewController,那么当我将 detailViewController 推送到导航堆栈时,程序会在运行时崩溃。 如果您只更改@interface 声明,它将与.xib 文件不同步,这可能是导致崩溃的原因。无论如何,UITableViewController 可能是您无论如何都想避免的事情,因为它对于添加其他用户界面元素而不是表格视图非常严格。您必须将文本编辑放在表格的页眉或页脚视图中。 帮助,我的情况完全相同,但我没有创建任何 .xib。我在 [init] 中创建 tableView 并在 viewDidLoad 中推送视图,但它仍然没有出现...:|

以上是关于如何在 UIViewController 中显示 UITableView?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:如何在 UIViewController 中隐藏和显示按钮

如何在 ios5 的 UIViewController 中显示 UIView?

如何在 iOS SDK 中禁用 UIView/UIViewController 的“突出显示子视图”消息?

如何显示 SwiftUI 视图而不是 UIViewController?

iPad 应用程序,如何在 uiviewcontroller 之上显示 uiviewcontroller

如何根据 UINavigationController 中显示的 UIViewController 更改 UINavigationBar