Iphone 在不同的UIViewController中重用自定义UITableView

Iphone 在不同的UIViewController中重用自定义UITableView,iphone,ios,uitableview,code-reuse,Iphone,Ios,Uitableview,Code Reuse,我正在为iOS 5.1开发一款iPhone应用程序。我构建了一个UIViewController,它有一个UITableView,其中包含一个UISearchDisplayController和其他视图,所有这些视图都以某种方式与表相关。UIVIewController是表的委托和数据源,并对表和搜索显示控制器进行一些自定义(图形化和业务相关)。到目前为止,一切正常 问题是,现在我想把这个相同的表(可能有不同的元素子列表,相同的类型)放在不同的控制器(应用程序的不同屏幕)中。我试图将我的控制器的

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

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

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


提前感谢大家

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

我已经创建了UIViewController的一个BaseTableViewController子类。然后,我将这个BaseTableViewController子类化,无论我想在哪里显示该tableview。BaseTableViewController定义了numberOfSectionsInTableView:、numberOfRowsInSection:&cellForRowAtIndexPath等方法。此外,此BaseTableVC中还定义了搜索功能,这反过来会根据需求覆盖这些方法。这一切对我来说都很好,因为你反应很快。但是,如果我想将该表作为复杂UIViewController的子视图放置,该UIViewController的视图是用Interface Builder构建的,该怎么办?比如说,一个带有其他标签的视图,图像视图,等等。。。我的问题是,我可以同时构建可重用表和与IB一起使用它的视图吗?如何添加其他元素?谢谢这是我的建议。试试这个&让所有人都知道结果。在ur复杂的UIViewController中,u可以[urUIVC addSubView:BaseTableViewController.view]。此外,还应根据需要在本urUIVC中添加其他视图,并注意框架尺寸和视图在窗口中的位置。现在,urUIVC使用了可重用的表&视图。在与.XIB文件相对应的VC文件中,您可以添加子视图:urUIVC(由可重用的tableview和其他视图组成)。可能我没有解释清楚。按照您的建议,复杂的UIViewController(我们称之为ComplexViewController)是BaseTableViewController的子类。但该子类将包含表中包含的其他视图。BaseTableViewController是用IB构建的,我希望ComplexViewController的视觉方面也用IB设计。我之前建议的这个视图子类化:UIViewController->BaseTableViewController->SampleView1(将包含可重用的表和您选择的其他视图)。现在在ComplexViewController中,[ComplexViewController添加子视图:BaseTableViewController.view]或SampleView](取决于需求)。您可以将BaseTableViewController子类化为许多SampleView,如SampleView2,3&如果你[ComplexViewController adSubView:SampleView1.view](或SampleView2,view,…)那么你将拥有ComplexViewController和可重用的tableview和其他视图对不起,也许我对iOS和Objective C太不熟悉了。那么,我可以拥有一个,比方说,第三类(只是NSObject的子类)并将其作为表委托、数据源钩住,和多个表的searchdisplaycontroller委托,以及在多个视图上搜索显示控制器?可能吗?如何从使用该表的UIViewController子类访问它。它应该是控制器中的属性吗?(我总是看到UIViewController的子类在委托和数据源中的示例,如果我问的是琐碎的事情,请再次道歉…)基本上是的。我理解您的问题是在另一个视图控制器中重用同一个表,但我的建议是重用构成该表的相同数据。此数据驻留在datasource实例中,该实例是一个委托(即,您将构成表的数据的来源委托给您编写的其他类,很可能是NSObject的子类)。我建议你读一下:谢谢@zero0cool,我做到了!现在我有了一个*Util类,它充当表的数据源和委托,还有一个充当SearchDisplayController的委托。在任何我想重新利用它的地方,我只需要实例化我的助手,并将其设置为table和searchDisplayController的委托和数据源。非常感谢。