【问题标题】:Reuse a custom UITableView in different UIViewControllers在不同的 UIViewControllers 中重用自定义 UITableView
【发布时间】:2012-05-06 21:01:00
【问题描述】:

我正在为 iOS 5.1 开发 iPhone 应用程序。我构建了一个 UIViewController,它有一个 UITableView 和一个 UISearchDisplayController 和其他视图,所有这些都以某种方式与表相关。 UIVIewController 是表格的委托和数据源,并对表格和搜索显示控制器进行一些自定义(图形和业务相关)。到目前为止,一切正常。

问题是现在我想将同一张表(可能具有相同类型的不同元素子列表)放在不同的控制器(应用程序的不同屏幕)中。我试图将我的控制器的 tableView 添加为其他控制器中的子视图,但它不起作用。我试图将我的表重建为 UIView 的子类(而不是 UIViewController)并将其添加为子视图,但它既不工作(它从 NIB 文件加载视图,但它的所有属性,包括 IBOutlets,其中 nil 或 0x000000 )。

经过大量搜索,我没有找到任何关于如何在不同控制器中重用 tableview 的示例。有什么提示吗?有什么例子吗?我应该将它构建为 UIViewController 还是 UIView?哪个类应该是 table 和 searchdisplay 的委托,记住我要重用的大部分逻辑是委托中的代码?

提前谢谢大家

【问题讨论】:

  • 我创建了一个 BaseTableViewController-UIViewController 的子类。然后,我将这个 BaseTableViewController 子类化到我希望显示该 tableview 的任何地方。 BaseTableViewController 定义了 numberOfSectionsInTableView:、numberOfRowsInSection: & cellForRowAtIndexPath 等方法。此 BaseTableVC 中还定义了搜索功能,该功能又根据要求覆盖这些方法。这一切对我来说都很好
  • 感谢您的快速回复。但是,如果我想将该表作为复杂 UIViewController 的子视图放置,它的视图是使用 Interface Builder 构建的?比方说,一个带有其他标签、图像视图等的视图……我的问题是,我可以同时构建可重用表和与 IB 一起使用它的视图吗?如何添加其他元素?谢谢
  • 这是我可以建议的。试试这个,让所有人知道结果。在您的复杂 UIViewController 中,您可以 [urUIVC addSubView:BaseTableViewController.view]。还可以根据要求在此 urUIVC 中添加其他视图,并注意窗口中的帧大小和视图位置。现在 urUIVC 具有可重用的表和视图。在VC文件CORRESPONDING TO .XIB FILE中,你可以添加SubView:urUIVC(包括可复用的tableview和其他views)。
  • 可能我解释的不好。根据您的建议,复杂的 UIViewController(我们称之为 ComplexViewController)是 BaseTableViewController 的子类。但是该子类将包含该表的其他视图。 BaseTableViewController 是用 IB 构建的,我希望 ComplexViewController 视觉方面也可以用 IB 设计。
  • 我之前建议的这个视图子类化:UIViewController -> BaseTableViewController -> SampleView1(将提供可重用的表和您选择的其他视图)。现在在 ComplexViewController 中,[ComplexViewController addSubView:BaseTableViewController.view] 或 SampleView](取决于要求)。您可以将 BaseTableViewController 子类化为许多 SampleView,例如 SampleView2,3,.. &如果您 [ComplexViewController adSubView:SampleView1.view] (或 SampleView2,view,..) 那么您将拥有带有可重用 tableview 和其他视图的 ComplexViewController

标签: iphone ios uitableview code-reuse


【解决方案1】:

最简单的解决方案不是创建自己的数据源类(可能作为单例),然后将其与其他控制器重用吗?这样,您获取和管理数据的方式就从显示方式中抽象出来了。就是它应该的样子。 这就是 MVC 的全部意义所在。

【讨论】:

  • 对不起,也许我对 iOS 和 Objective C 太陌生了。所以,我可以有一个,比如说,第三类(只是 NSObject 的子类)并将它作为表委托、数据源、和 searchdisplaycontroller 多个表的委托和多个视图上的搜索显示控制器?那可能吗?我如何从使用该表的 UIViewController 子类访问它。它应该是控制器中的属性吗? (我总是看到 UIViewControllers 的子类中有委托和数据源的例子,如果我问的是琐碎的事情,再次抱歉......)
  • 基本上是的。我理解您的问题是在另一个视图控制器中重用同一个表,但我建议重用构成该表的相同数据。此数据驻留在数据源实例中,它是一个委托(即,您将构成表的数据的来源委托给您编写的其他类,很可能是 NSObject 的子类)。我建议您阅读以下内容:link
  • 谢谢@zero0cool,我做到了!现在我有一个 *Util 类,它充当表的数据源和委托,另一个充当 SearchDisplayController 的委托。任何我想重新利用它的地方,我只需要实例化我的 Helper 并将其设置为 table 和 searchDisplayController 的委托和数据源。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多