繁体   English   中英

将UIViewController更改为故事板中的UITableViewController?

[英]Change a UIViewController to a UITableViewController inside a storyboard?

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

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

还有另一种方法可以实现这一目标吗? 我真的宁愿不必在故事板上创建一个新的VC并将所有东西都搬过来,这是一个很大的麻烦。

我将补充一点,因为问题是关于如何将UIViewController更改为UITableViewController,并且考虑到这个问题已经超过一年了,而且原始答案是有效的,可能是也可能不是唯一的解决方案。时间,实际上并没有回答问题,也不是唯一的解决方案。

可以这样做,您只需在IB中设置表视图委托和数据源出口,并手动编辑故事板XML,这听起来很可怕,但实际上非常简单。

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

@implementation MyTableViewController : UITableViewController
...
@end

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

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

<!-- 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中。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM