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

Luk*_*uke 15 xcode objective-c uitableview uiviewcontroller ios

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

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

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

Jor*_*ndo 18

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

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

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

@implementation MyTableViewController : UITableViewController
...
@end
Run Code Online (Sandbox Code Playgroud)

接下来,在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>
Run Code Online (Sandbox Code Playgroud)

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

<viewController>
</viewController>
Run Code Online (Sandbox Code Playgroud)

改为是tableViewController

<tableViewController>
</tableViewController>
Run Code Online (Sandbox Code Playgroud)

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

编辑:

我还要补充一点,UITableView必须是根视图.它不能嵌入另一个UIView中.


rde*_*mar 13

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