这应该是一个非常基本的问题,即使你可以链接到涵盖这个(或类似的)主题的某种文章/教程,我也会很高兴。
我有一个带有四个选项卡的应用程序,每个选项卡包含一个带有表视图的导航控制器。我不使用UITableViewController
子类,因为我希望在一些表格之上有一个静态视图,在一切表格下面有一个图像背景。我也使用不同类型的自定义单元格(大多数配置为-willDisplayCell
中的图像和代码)。因为我想要所有表格的相同外观和感觉,我想知道如何重用一些代码,但我很难弄清楚这一点。我是否必须创建一个带有UIViewController
插座的“基础”UITableView
子类,然后将其用作我的超类?或者我是否必须在单独的类中实现我的UITableViewDelegate
并使用该类的对象作为表视图委托?或者我应该使用自定义的UITableView
和子类来代替吗?
如果需要,我可以提供更多细节,但我想这对于开始讨论已经足够了。谢谢你的帮助!
答案 0 :(得分:6)
我会考虑继承UITableView并将dataSource
和delegate
设置为self并在类中实现GUI逻辑,并创建一个自定义逻辑来获取数据(可能转发一些dataSource / control)将功能委托给您的一个VC。)
单元格的布局代码应该放在单元格逻辑中!您应该考虑为包含布局和逻辑的逻辑创建自定义UITableViewCell
子类(可能还有它们的XIB)。重用。 (也许是一个dataObject
属性,让单元格读取你的模型?!)。然后,您可以使用UITableView子类来创建和管理这些单元格(例如模型类和XIB名称之间的映射)
这可能是一种生成大量可重用代码的方法,您只需更改模型类或修改其布局,或子类化模型类或子类UITableViewCells等细节。
答案 1 :(得分:0)
一种可能的方法是创建一个继承UITableView的自定义视图。覆盖initWith - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
并设置要在表中使用的GUI。
现在,您可以在应用程序中的任何位置使用此类。
现在,当您使用不同的单元格模式时,建议您为每个单元格创建一个类,在您内部,cellForRowAtIndexPath根据某些标志或数据结构创建不同单元格的对象。阅读工厂设计模式,深入理解这一概念。
基本流程将是这样的。
这将使所有单元格和表格在整个应用程序中可重复使用。
有关Decorator设计模式的更多详细信息。
如果需要详细信息,请发布。
答案 2 :(得分:0)
我确实说最好的办法是从UITabBarController
继承你的MasterController
。
在此MasterController
viewDidLoad
或viewWillLoad
中,您可以编写将在您的子类稍后使用的常见布局和设置。
这也更方便,因为您可以在MasterController
实施方法中相应地刷新视图。
通过此MasterController
加载一个基本NIB文件也可能很好,并且可以在子控制器中完成自定义布局(例如在initWithNibName:bundle:
方法中。
我认为创建UITableView
的子类并不是一个好主意,因为您不是自定义Table View的行为,而是自定义使用它的控制器。
希望这有帮助。
编辑:NIB方式
如果你决定使用NIB文件,你可以继续使用一个MasterController,如下所示。
UITabViewController
的代码中,您将使用
[[YourTabBarController alloc]
initWithNibName:@"YourMasterNIBFile.xib" bundle:nil]
由于这些商店会被继承,因此您继承YourTabBarController
的商品YourTabBarController
将拥有正确构建视图所需的所有信息。
我希望这很清楚,我已经将这个方法用于我的一个应用程序,并且构建MasterController
所花费的时间绝对值得为它提供的所有灵活性带来痛苦。
答案 3 :(得分:0)
我这样做是通过创建一个基类(uiviewcontroller或uitableviewcontroller),并使用Type的新init方法。例如,如果您在代码(非笔尖)
中创建它使这个基类也成为您的委托/数据源,并实现所有必需的方法。 根据viewcontroller实例化的选项卡,调整数据源方法 - 设置要显示的不同数据。在您的视图控制器中,委托方法可能仍然相同,因此没有任何更改。
我通常在代码中执行UI操作,因此您可以使用带有tableView子视图的viewcontroller进行静态视图,或者您也可以将静态视图放在UITableView之上,方法是将其添加到tableView作为子视图,然后覆盖layoutSubviews以调整y坐标使其看起来像是静态的。 (WWDC2011会议高级Scrollview技术显示了如何执行此操作)。
如果您正在使用NIB,那么您必须使用initWithNib,那么最简单的方法是将基类再次子类化为每个选项卡的4种不同情况。
现在因为你的代码被分解为基类,如果你想进行更改,那么它只能改变一个类。
答案 4 :(得分:-2)
出于兴趣,您为什么要在tableview单元格之上设置静态视图?
您可以使用UITableViewController在tableview单元格后面显示背景图片。