将一个UIViewController更改为一个故事板内的UITableViewController?

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

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

有没有另一种方法来实现这一目标? 我真的不必在故事板上创造一个新的风险投资,并将所有的东西都搬走,这是一个很大的麻烦。

如果您希望静态单元格表​​视图不占用整个屏幕,则使用容器视图是最简单的方法。 从一个普通的UIViewController开始,将一个容器视图(在对象列表中的普通UIView旁边)拖到它的视图中。 resize,但是你想要的 – 故事板将自动提供一个视图控制器连接到这个容器视图与embeddedsegue。 删除该控制器,拖出一个表视图控制器,并从容器视图拖动到这个表视图控制器,以创build一个新的embeddedsegue。 这个表视图控制器可以通过它的childViewControllers属性从UIViewController进行访问(相反,如果需要的话,可以使用parentViewController从表视图控制器访问UIViewController)。

我将补充到这一点,因为问题是关于如何将UIViewController更改为UITableViewController,并且考虑到这个问题已经过了一年多了,原来的答案,虽然有效,可能或可能不是唯一的解决scheme时间,并没有真正回答这个问题,也不是唯一的解决scheme。

有可能做到这一点,你只需要在IB中设置表格视图委托和数据源sockets,并手动编辑故事板XML,这听起来很可怕,但实际上很简单。

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

 @implementation MyTableViewController : UITableViewController ... @end 

接下来,在你的UITableView的dataSource和delegate上创build新的引用出口。 最简单的方法是从UITableView控制拖动到自己。 popup窗口会给你dataSource和委托选项。

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

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

所有你需要做的是改变开放和closures视图控制器标签

 <viewController> </viewController> 

改为tableViewController

 <tableViewController> </tableViewController> 

而已! 无需创build新的UITableViewController场景或在容器视图中embeddedUITableViewController。

编辑:

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

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

我认为用这种方法删除一些重要的东西的风险较小。

在复制节对象之前,请确保两个tableviews(UIViewController和UITableViewController)具有相同的属性设置,如静态或dynamic单元格,样式(纯文本或分组)等。