将UITableViewController子类重构为UIViewController子类

时间:2013-01-30 14:16:03

标签: ios uiviewcontroller refactoring uitableview

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

我之前遇到过这个问题并通过创建一个新的UIViewController子类和xib来解决它,只是将我需要的所有东西从UITableViewController子类的文件复制并粘贴到新子类的文件中。我知道,我现在知道这是一个hacky和令人不快的解决方案。有谁知道这样的事情可以做得恰到好处吗?

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

1 个答案:

答案 0 :(得分:1)

你在问题​​中提到的一些事情表明存在一些误解。首先,如果你正在推动你的表视图控制器,那么它必须嵌入一个导航控制器,因此将有一个导航栏 - 你可以添加一个完成按钮到这个栏,如果这是你想要的所有更改。无需重构代码。

如果你想使用UIViewController而不是表视图控制器,你应该能够连接你的笔尖。您是否将nib中文件所有者的类更改为UIViewController类?在你这样做之后,你应该能够连接出口。

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

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