iOS – 在单个屏幕上使用多个视图控制器

在iOS中,如果屏幕包含许多function,我很难保持视图控制器的代码清洁,因为为同一屏幕定义了许多方法。 特别是使用委托方法(例如UITableViewUIAlertView等),或者如果同一个VC文件同时支持iPad和iPhone,它很快就会变成一团糟。

我也意识到,如果你使用#ifdef语句,它会打破好的#pragma mark - Title分组。 问题1 – 您组织一个体积庞大的视图控制器的做法是什么?

问题2 – 类似地,对于具有多个部分组件的页面(例如,底部菜单,顶部菜单,侧面菜单等),您如何找到以下模式?

 UIViewController *vc_component = ... [self.view addSubview:vc_component.view]; 

就MVC而言,这似乎是正确的,因为vc_component负责其视图的所有交互。 困扰我的唯一事实是有几个视图控制器同时负责同一个屏幕,这不是理想的IMO。

很想听听你的想法。

根据我的经验,如果一个视图控制器中包含大量代码,我会尝试将此代码转换为另一个类。 例如,我的视图控制器包含处理某些控件以管理模型对象的面板。 在这种情况下,我将创建ModelPanelControl视图并将其所有逻辑放在其实现中,然后将其作为我的View Controller的子视图。 但是,如果您对View Controller进行了很多委托调用,那么只要您使用pragma标记拆分这些调用,我认为这没有任何问题。

要回答你的第二个问题,我认为你的项目是> = iOS5,因为你可以使用一个非常好的View Containment API将多个View Controller添加到一个屏幕。 这是一个文档 ,您还可以观看WWDC 2011video,名为Implementing UIViewController Containment。

希望这能回答你的问题。 干杯!

在回答您的第一个问题时,如果您确实有一个由一个容器viewController管理的viewControllers,为什么不让每个viewControllers成为其显式函数的delegate ? 因此,从该viewController触发UIAlertView或UIActionSheet的任何按钮操作等都是这些特定警报的委托?

您还可以很好地查看一些UIKit块类别。 名叫Mugunth Kumar的绅士有一个名为UIAlertView + MKBlockAdditions,我发现它非常方便摆脱一堆代表意大利面条。

通常的做法是定义一个基本的UIViewController,你的所有其他viewControllers都inheritance自那里,你实现了所有常见的帮助器方法。 将最小公分母放在那里,并将其余控制器设置为此类的子类。 这至少有助于复制和粘贴问题以及DRY范例。

最后,直到iOS5,将viewControllers封装在viewControllers中是很麻烦的,因为没有自动在所有子视图中调用旋转方法。 工作流程如下:

 [viewControllerContainer addChildViewController:anotherViewController]; [viewControllerContainer.view addSubview:anotherViewController.view]; [anotherViewController didMoveToParentController:viewControllerContainer]; 

这教授掌管谁的操作系统。