将 UITableViewController 子类重构为 UIViewController 子类

Posted

技术标签:

【中文标题】将 UITableViewController 子类重构为 UIViewController 子类【英文标题】:Refactoring a UITableViewController subclass to a UIViewController subclass 【发布时间】:2013-01-30 14:16:02 【问题描述】:

在我的应用程序中,我想在“全屏”中显示一个表格,所以我创建了一个 UITableViewController 的子类。当我想显示表格时,我只是实例化它并使用pushViewController:animated:。现在我决定我真的想将它显示为一个模式,所以我想给它一个带有“完成”按钮的导航栏。我相信这意味着我现在需要将其设为 UIViewController 子类而不是 UITableViewController 子类,因为它现在不仅仅是一个表。不过,我不确定这是否可以做到;我创建了一个 xib,但 Xcode 似乎不想让我使用该 xib 在 .h 文件中创建 IBOutlets,所以我不认为这两者是“连接的”。

我以前遇到过这个问题,通过创建一个新的 UIViewController 子类和 xib 并将我需要的所有内容从 UITableViewController 子类的文件复制并粘贴到新子类的文件中来解决它。我当时就知道,正如我现在所知道的那样,那是一个笨拙且令人不快的解决方案。有谁知道如何正确完成这样的事情?

另外,为了避免以后出现这个问题,我是否应该永远不要在未来制作这样的***视图,而只是确保我使用的所有 pushViewController:animated:presentModalViewController:animated: 都是 UIViewController 子类?或者做我一直在做的事情安全吗?

【问题讨论】:

【参考方案1】:

您在问题中提到的几件事表明存在一些误解。首先,如果你正在推动你的表格视图控制器,那么它必须嵌入到导航控制器中,因此会有一个导航栏——你可以在这个栏上添加一个完成按钮,如果这就是你想要的全部改变。无需重构代码。

如果您想使用 UIViewController 而不是表格视图控制器,您应该能够连接您的 nib。您是否将 nib 中文件所有者的类更改为 UIViewController 类?完成此操作后,您应该能够连接插座。

将代码从表视图控制器复制和粘贴到视图控制器中并没有什么“hacky”。我一直这样做,而不是写出所有这些文件。

我不确定您在最后一个问题中要问什么。如何在屏幕上显示表格视图(推送或呈现)与您显示的是表格视图控制器还是视图控制器无关。您应该使用最适合您需求的一种。

【讨论】:

你说得对,当我推桌子时有一个导航栏,但当我将它显示为模式时却没有,这是我希望做的。无论如何,如果文件所有者是此处缺少的步骤,则更改类;出于某种原因,我的印象是,如果我有 Foo 类并添加了 Foo.xib,Xcode 会自动建立关联。更改班级所有者后,事情按预期工作。谢谢!

以上是关于将 UITableViewController 子类重构为 UIViewController 子类的主要内容,如果未能解决你的问题,请参考以下文章

将 UITableViewController 添加到其他视图

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

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

使用 UITableViewController 从 Firebase 获取当前子 ID

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

UITableViewController子控制器的使用方法