在iOS中,如果屏幕包含许多功能,我很难保持视图控制器的代码清洁,因为为同一屏幕定义了许多方法。特别是对于(例如UITableView
,UIAlertView
等)的委托方法,或者如果同一个VC文件同时支持iPad和iPhone,它很快就会变成一团糟。
我也意识到如果你使用#ifdef
语句,它就会破坏好的#pragma mark - Title
分组。
问题1 -
你组织一个非常笨重的视图控制器的做法是什么?
UIViewController *vc_component = ...
[self.view addSubview:vc_component.view];
对于我而言,MVC似乎是正确的,因为vc_component
负责其视图的所有交互。困扰我的唯一事情就是有几个视图控制器同时负责同一个屏幕,这不是理想的IMO。
很想听听你的想法。
答案 0 :(得分:1)
根据我的经验,如果一个视图控制器中包含大量代码,我会尝试将此代码放入另一个类中。例如,我的视图控制器包含处理某些控件以管理模型对象的面板。在这种情况下,我将创建ModelPanelControl
视图并将其所有逻辑放在其实现中,然后将其作为我的View Controller的子视图。但是,如果您对View Controller进行了很多委托调用,那么只要您使用pragma标记拆分这些调用,我认为这没有任何问题。
要回答您的第二个问题,我认为您的项目是> = iOS5,因为您可以使用非常好的View Containment API将多个View控制器添加到一个屏幕。这是一个documentation,您还可以观看WWDC 2011视频,名为Implementing UIViewController Containment。
希望这能回答你的问题。 干杯!
答案 1 :(得分:1)
在回答您的第一个问题时,如果您确实有一个由一个容器viewController管理的viewControllers,为什么不让每个viewControllers成为其显式函数的delegate
?因此,从该viewController触发UIAlertView或UIActionSheet的任何按钮操作等都是这些特定警报的委托?
您也可以很好地查看一些UIKit块类别。名叫Mugunth Kumar的绅士有一个叫UIAlertView + MKBlockAdditions,我发现它非常方便摆脱一堆代表意大利面。
通常的做法是定义一个基本的UIViewController,你的所有其他viewControllers都继承自那里,你实现了所有常见的帮助方法。将最小公分母放在那里,并将其余控制器设置为此类的子类。这至少有助于复制和粘贴问题,以及DRY范例。
最后,直到iOS5,将viewControllers封装在viewControllers中是很麻烦的,因为没有自动在所有子视图中调用旋转方法。工作流程如下:
[viewControllerContainer addChildViewController:anotherViewController];
[viewControllerContainer.view addSubview:anotherViewController.view];
[anotherViewController didMoveToParentController:viewControllerContainer];
教授掌管谁的操作系统。