objective-c - 将 Storyboard中的 UIViewController 更改为 UITableViewController?

标签 objective-c ios xcode uiviewcontroller uitableview

我在 Storyboard中制作了一个 View ,现在我决定宁愿通过静态表格单元格显示它的数据。

我不能在 UIViewController 中使用静态 TableView (静态 TableView 仅在嵌入到 UITableViewController 实例中时有效)。因此,我需要以某种方式将现有的 UIViewController 转换为 UITableViewController。我已经更改了 .h 文件的父级,但没有成功。

还有其他方法吗?我真的宁愿不必在 Storyboard中创建一个新的 VC 并将所有内容都移过去,这很麻烦。

最佳答案

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

这是可以做到的,你只需要在 IB 中设置 table view delegate 和 datasource outlets,然后手动编辑 storyboard XML,这听起来很可怕,但实际上非常简单。

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

@implementation MyTableViewController : UITableViewController
...
@end

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

最后,您需要更改 Storyboard XML。 Storyboard 文件可以很快变得很大。找到您正在寻找的场景的最简单方法是在身份检查器中设置 Storyboard 标识符。要直接查看 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>

您需要做的就是更改打开和关闭 View Controller 标签

<viewController>
</viewController>

改为 tableViewController

<tableViewController>
</tableViewController>

就是这样!无需创建新的 UITableViewController 场景或在容器 View 中嵌入 UITableViewController。

编辑:

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

关于objective-c - 将 Storyboard中的 UIViewController 更改为 UITableViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957346/

相关文章:

objective-c - 对 NSMutuable 数组进行排序/改组

iphone - uitableviewcell 中的 UIStepper

ios - 包含头文件的问题

ios - Apple Mach-O for libAppLovinSdk.a in cocos2d for iPhone

xcode - 如何从 Xcode 5.02 运行 C++

ios - 无法将 channel 保存到 PFInstallation (iOS)

objective-c - 在沙盒应用程序中获取用户在 Mac 上的下载文件夹的 API

ios - 是否可以在 viewDidLoad/viewWillAppear 之外更改导航栏标题?

ios - 使用谷歌字体 - Meteor Cordova

ios - 如何以编程方式设置 UISlider 初始值,或者,iOS 程序如何启动?