如何重新创build静态单元格支持UITableViewController?

我有很多共同的逻辑,因此我所有的viewController从BaseViewController,BaseDetailsViewController或BaseWebViewControllerinheritance。 最后两个inheritance自从UIViewControllerinheritance的BaseViewController。 问题是我不能使用tableViews静态单元格,因为我的BaseDetailsViewController不是从UITableViewControllerinheritance。

我从来没有使用和inheritanceUITableViewController,因为可以通过从UIViewControllerinheritance,使用添加的UITableView并实现数据源和委托方法来实现。 因此,对于表单types的屏幕(SignUp或其他数据input屏幕),我使用我自己的BaseDetailsViewController,它添加了方便的方法(inputvalidation,自定义样式,滚动键盘,处理input字段导航等)

使用UITableViewController有两个真正的好处:1)键盘滚动(如果你使用文本字段)和2)在屏幕上轻松创build你的表单UI元素。 第一个好处是我无关紧要,因为我已经在BaseDetailsViewController里面自己实现了这个东西。 关于第二个好处,我在scrollView中创build了我的表单,这给了很大的灵活性,但是它有点更多的努力(特别是当需要更新屏幕时)。 因此,我听到有些人实现了自己的UITableViewController,然后使它从BaseViewControllerinheritance。 所以我开始深入这个方法。

到目前为止,我遇到了这两种方法:

  1. 重新创build你自己的tableVC 。 不清楚如何使它适用于静态单元格。 目前我的演示应用程序崩溃,如果我的ReplaceTableViewController没有实现numberOfRows和cellForRow,并不显示静态单元格,如果我用虚拟内容实现它们。
  2. 方法 – swizzling 。 不清楚如何通过为UITableViewController注入baseViewControllerinheritance来更改类inheritance,但还是不清楚需要添加哪些方法。

有谁试过,想分享?

更新我不使用故事板,因为我促进干净的MVC – 作为组件的每个屏幕应该有自己的模型,视图(Xib)和控制器,所有存储在单独的文件,以消除大型应用程序项目中的多个开发人员的合并冲突(30+屏幕)。 因此,embedded式segue到tableViewController的容器视图也不是一个选项。

UPDATE2如果有人想看看我为什么和怎么做这个,这里有一个链接到我的开源模板基于新的项目生成器框架 ,我最近开始发布。

静态单元需要一个UITableViewController。 你现在不能改变这个。

但是要在UITableViewController之外的UITableView中使用静态单元格,您可以在Non-Table-UIViewController中使用ContainerView,在这里放置一个真正的单独创build的UITableViewController,使用这些静态单元格。

为了在多个视图控制器之间共享通用代码,inheritance并不是你自己在UIViewController和UITableViewController的子类中发现的最好的解决scheme。 你可以使用某种组合来共享代码,特别是对于Objective-C类别。

类别不允许拥有自己的属性,但是可以使用objc_setAssociatedObject解决方法 。

另一种方法是不使用静态单元格,而是使用DataSource-Delegate的UITableView中的dynamic单元格

正如你在我的屏幕截图中看到的,为了重新使用静态单元格的特殊TableView,我将它放在ContainerView中的其他ViewControllers中。 既然你不使用故事板,我敢肯定,这也可以通过没有故事板的代码来完成。

在这里输入图像说明