Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 什么';组织多个子视图的最佳方式是什么?_Iphone_Uitableview_Subview - Fatal编程技术网

Iphone 什么';组织多个子视图的最佳方式是什么?

Iphone 什么';组织多个子视图的最佳方式是什么?,iphone,uitableview,subview,Iphone,Uitableview,Subview,作为一个对iPhone开发相当陌生的人,我一直在努力寻找管理多个子视图的良好设计模式,特别是在子视图需要定义相同类型的委托方法的情况下 例如,我有一个视图,需要根据用户操作在2个UITableView之间交换。两个UITableView都需要定义一个UITableViewControllerDelegate对象来填充行等 您是否有经验的iPhone开发人员发现,重载主视图控制器作为两个子视图的代理是正确的方法?目前,我定义了两个对象,每个对象作为每个UITableView的代理,以使事情更有条理

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

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

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


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

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


切换UITableView对我来说就像是UINavigationController的工作。通常在iphone上,你不只是重新排列你的控件。您可以创建完整的屏幕(在代码中或通过InterfaceBuilder以.nib的形式),使用UINavigationController或UITabBar在它们之间切换

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


另外,不要忘记,视图控制器不一定是神奇的对象,您只能与Apple认可的选项卡栏和导航控制器一起使用。编写您自己的“切换视图控制器”是完全合法的,它接受两个视图控制器并在它们之间切换。不过,您需要进行一些测试,以确定是否需要手动调用-viewwillbeen:以及它的同类功能。根据您在层次结构中添加视图控制器的位置,有一些神奇的机制可以为您执行此操作,也可以不为您执行此操作。

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

一个好的方法是为每个表使用单独的视图控制器。否则,试图跟踪您在各种表视图委托方法中支持的数据集就太麻烦了,并且很难对一个表进行大量定制,而这些定制可能不适用于另一个表

使用组合视图控制器时要注意的主要问题是“self.navigationController”,相关调用不会返回任何内容(因为它们实际上不是导航控制器的子对象),因此您需要传递该引用,或者在表视图控制器中以某种不同的方式处理该引用