15

我已经在我的故事板中创建了一个视图,现在我决定我宁愿通过静态表格单元格显示它的数据。

我不能在UIViewController( Static table views are only valid when embedded in UITableViewController instances) 中使用静态表视图。所以,我需要以某种方式将我现有的转换UIViewControllerUITableViewController。我已经更改了 .h 文件的父级,但这还没有完成。

还有其他方法可以实现吗?我真的宁愿不必在情节提要中创建一个新的 VC 并将所有内容都移过来,这很麻烦。

4

3 回答 3

18

我将对此进行补充,因为问题是关于如何将 UIViewController 更改为 UITableViewController,并且鉴于这个问题已有一年多的历史了,并且原始答案是有效的,并且可能是也可能不是唯一的解决方案时间,实际上并没有回答问题,也不是唯一的解决方案。

这样做是有可能的,你只需要在 IB 中设置 table view delegate 和 datasource outlets,并手动编辑 storyboard XML,这听起来很吓人,但实际上很容易。

首先,将类的父类更改为 UITableViewController。UITableViewController 已经采用了 UITableViewDatasource 和 UITableViewDelegate 协议,所以如果你的类也这样做了,你可以删除它们:

@implementation MyTableViewController : UITableViewController
...
@end

接下来,在 UITableView 上为其 dataSource 和委托创建新的引用出口。最简单的方法是控制从 UITableView 拖动到自身。弹出窗口将为您提供数据源和委托选项。

最后,您需要更改情节提要 XML。故事板文件可以很快变得相当大。找到您正在寻找的场景的最简单方法是在 Identity Inspector 中设置 Storyboard Identifier。要直接查看 XML,请在项目导航器中右键单击情节提要文件并选择“打开为 -> 源代码”。现在只需搜索您之前设置的重用标识符。你会看到类似这样的东西:

<!-- My Table View Controller -->
<scene sceneID="EuE-XX-cCb">
  <objects>
    <viewController storyboardIdentifier="MY_TABLE_VIEW_IDENTIFIER" ... >
      // Lots of other stuff
    </viewController>
  </objects>
</scene>

您需要做的就是更改打开和关闭视图控制器标签

<viewController>
</viewController>

改为 tableViewController

<tableViewController>
</tableViewController>

而已!无需创建新的 UITableViewController 场景或在容器视图中嵌入 UITableViewController。

编辑:

我还应该补充一点,UITableView 必须是根视图。它不能嵌入到另一个 UIView 中。

于 2014-04-07T16:42:36.677 回答
13

如果您希望静态单元格表​​视图不占据整个屏幕,那么使用容器视图是最简单的方法。从一个普通的 UIViewController 开始,然后将一个容器视图(在对象列表中的普通 UIView 旁边)拖到它的视图中。随心所欲地调整它的大小——故事板将自动提供一个视图控制器,该控制器使用嵌入转场连接到该容器视图。删除那个控制器,拖出一个表视图控制器,然后从容器视图中右键拖动到这个表视图控制器,以创建一个新的嵌入segue。可以从 UIViewController 及其 childViewControllers 属性访问此表视图控制器(相反,如果需要,您可以使用 parentViewController 从表视图控制器访问 UIViewController)。

于 2012-12-19T18:20:50.863 回答
1

我所做的是在 IB 中创建一个 UITableViewController,用文本编辑器打开 Storyboard,然后将里面的所有节点从 UIViewController 复制到 UITableViewController。

我认为通过这种方式删除重要内容的风险较小。

在复制部分对象之前,请确保两个 tableviews(UIViewController 和 UITableViewController)具有相同的属性集,例如:静态或动态单元格、样式(普通或分组)等。

于 2016-03-26T19:14:35.077 回答