UIView& UIViewController设计模式

时间:2012-02-24 21:01:58

标签: ios cocoa-touch uiviewcontroller cocoa-design-patterns

这是正确的,当ViewController在其方法中创建另一个ViewController时(比如说viewDidLoad或viewWillAppear)?

在我的情况下 - 我有一个视图A,它包含几个其他视图--B和C,它们本身相当复杂,所以为它们设计了特殊的视图控制器vcB和vcC,这些视图控制器是在vcA视图中创建的视图控制器A.

这样好吗?例如,如果vcA将自己设置为vcB的委托,该怎么办?这意味着,vcB将保留vcA。在这种情况下,为了正确释放所有对象,我们需要将vcB的委托设置为nil,但是这样做的好时机是什么? viewWillDisappear:viewDidDisappear:或smth。其他?

我确信这不是唯一一个问题出现的情况,所以我正在寻找你的意见,如何正确设计视图控制器之间的这种交互。

2 个答案:

答案 0 :(得分:1)

我亲眼目睹了只有一个视图控制器应该同时运行的想法。至于我自己,如果它简化整体设计(降低复杂性)并使设计管理更容易,我倾向于同时使用多个视图控制器。正如你可以在recent response that I posted中看到的那样,在我看来Apple通过提供对自定义内容视图控制器的支持而向同一方向发展,允许您同时操作多个视图控制器。

Jonah Williams撰写的博客值得一读,只是为了了解您可能需要处理的内容。但坦率地说,我没有任何与他的建议相矛盾的问题。 (该帖约有一年的历史。)

视图控制器的一个关键点是保存它正在管理的视图的委托方法。该视图实际上并不关心哪个对象充当其委托。因此,如果您希望设计与单VC视点更加协调,则可以将委托方法放入子类NSObject中,而不是将其称为视图控制器。您很可能必须创建一些UIViewController已经拥有的方法。但是,您不必将其称为视图控制器。我,我只是将UIViewCcontroller子类化。

答案 1 :(得分:0)

通常,您不希望为另一个控制器的子视图使用单独的视图控制器。这不是视图控制器的工作方式。

Apple的导航和标签栏控制器执行此操作,但它们非常复杂且非标准(这可能是您不允许将它们子类化的原因。)