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

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

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

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

【问题讨论】:

    标签: ios uiviewcontroller refactoring uitableview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你说得对,当我推桌子时有一个导航栏,但当我将它显示为模式时却没有,这是我希望做的。无论如何,如果文件所有者是此处缺少的步骤,则更改类;出于某种原因,我的印象是,如果我有 Foo 类并添加了 Foo.xib,Xcode 会自动建立关联。更改班级所有者后,事情按预期工作。谢谢!
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2011-05-21
    • 2011-12-12
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2016-01-04
    相关资源
    最近更新 更多