5

作为一个对 iPhone 开发相当陌生的人,我一直在努力寻找管理多个子视图的良好设计模式,特别是在子视图需要定义相同类型的委托方法的情况下。

例如,我有一个视图,我需要根据用户操作在 2 个 UITableView 之间进行交换。两个 UITableView 都需要定义一个 UITableViewControllerDelegate 对象来填充行等。

您是否更有经验的 iPhone 开发人员发现重载主视图控制器作为两个子视图的委托是正确的做事方式?目前,我定义了 2 个对象,每个对象都充当每个 UITableView 的委托,以使事情更有条理。它完成了我需要它做的事情,但这是一个很好的模式吗?

我认为有一些最佳实践可以避免内存管理和类似有趣的事情的各种陷阱。提前致谢!

4

3 回答 3

5

您可以将视图用作容器来保存表格等元素。因此,在您概述的情况下,您将拥有一个容器视图并在其中交换 UITableViews ......

一个好的方法是为每个表设置单独的视图控制器。否则,试图通过各种表视图委托方法跟踪您支持的数据集会变得过于混乱,并且使得对一个可能不适用于另一个表的大量定制变得更加困难。

使用组合视图控制器时要注意的主要事项是“self.navigationController”,相关调用不会返回任何内容(因为它们不是导航控制器的真正子级),因此您需要传递该引用或其他方式在表视图控制器中处理它的方式有所不同。

于 2009-04-03T07:20:27.537 回答
2

如果两者之间只有很小的差异——例如,如果表格单元格的布局方式相同,但使用的数据略有不同——我可能会使用 if 语句,但否则我会使用某种单独的委托对象。关注点分离是这里的关键:如果您正在编写一种方法来完成两种截然不同的事情,这表明您的代码组织得不够好,无法阅读、可维护或灵活。

此外,不要忘记视图控制器不一定只能与 Apple 认可的标签栏和导航控制器一起使用的神奇对象。编写自己的“切换视图控制器”是完全合法的,它需要两个视图控制器并在它们之间切换。但是,您需要进行一些测试,以确定是否需要手动调用 -viewWillAppear: 及其同类 - 有一些神奇的机器可能会或可能不会为您执行此操作,具体取决于您添加视图控制器的位置在层次结构中。

于 2009-04-03T04:26:20.263 回答
1

这就是我自己处理这种情况的方式。每个 UITableView 一个控制器和一个委托。数据源可以被重用,如果这有意义的话(即相同的数据显示在两个 UITableViews 中)否则你会在你的委托方法中有很多 ifs,检查哪个 tableview 发送消息。

切换 UITableViews 对我来说听起来像是 UINavigationController 的工作。通常在 iPhone 上,您不只是重新排列控件。您创建完整的屏幕(在代码中或通过 InterfaceBuilder 作为 .nib),使用 UINavigationController 或 UITabBar 在它们之间切换。

于 2009-04-02T22:51:21.270 回答