【发布时间】: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