IPhone - 使用哪种View Controller方法

时间:2009-08-27 03:20:09

标签: iphone cocoa-touch design-patterns uiviewcontroller

我正在试图弄清楚应该在不同的UIViewController方法中使用什么逻辑,例如viewDidLoad,viewDidAppear,viewWillAppear,...

我的应用程序的结构是我有一个根视图控制器,它实际上没有自己的视图,而是它有一个选项卡视图控制器并加载其他视图控制器。但在将来,它可能必须加载其他视图控制器而不是标签栏控制器,具体取决于应用程序逻辑。

我的主要问题是,人们通常会在viewDidLoad,....方法中添加什么。

目前我:

viewDidLoad - 设置标签栏控制器并将其视图设置为视图控制器自己的视图

viewDidAppear - 检查用户是否已存储登录信息                    如果不是 - 登录时出现                    如果是这样,请登录并获取第一个标签的应用数据

我现在想弄清楚我的设置标签栏控制器的逻辑是应该进入loadView而不是viewDidLoad。

任何帮助都会很棒。在网络上找到的小例子很棒,但他们没有详细说明应该如何构建更大的应用程序。

2 个答案:

答案 0 :(得分:3)

您不应同时实施-viewDidLoad-loadView;它们用于不同的目的。如果加载NIB,则应实现-viewDidLoad以执行加载NIB后需要执行的任何功能。如果你还没有在NIB中完成它,那么连接tabbar是合适的。

如果你不使用NIB,应该实现

-loadView,并且应该构建视图。

在你登场前立即调用

-viewWillAppear。这是一个设置通知观察,根据自上次屏幕后已更改的模型类更新数据的好地方,以及在用户看到您之前一起行动。你不应该在这里执行任何动画。你不在屏幕上;你不能动画。由于这个错误,我看到很多动画故障。它有点工作,但看起来很奇怪。

你登场后会调用

-viewDidAppear。这是你进行任何输入动画的地方(例如,向上滑动一个模态;不是你应该经常这样做,但我只是看了一些代码)。

在你离开屏幕之前调用

-viewWillDisappear。这是你可以做任何离开动画的地方(包括取消选择的tableview单元格等)。

在屏幕外(动画完成后)调用

-viewDidDisappar。在这里删除任何观察结果,尽可能释放内存,尽可能地进入睡眠状态。

我在这里触摸设置和拆除观察。我在View controllers and notifications中更深入地探讨了这一点。

答案 1 :(得分:0)

每个viewDidLoad视图的每个生命周期都会调用

UIViewController一次。在用户开始与视图交互之前,您需要在其中放置需要设置和工作的内容。

只要视图出现在用户身上,就会调用

viewDidAppear。它可能不止一次被调用。一个示例是应用程序的根屏幕,使用UINavigationController来推送和弹出视图层次结构。把东西放在那里,你每次都想做。例如,您可能希望隐藏根屏幕的UINavigationBar,但是要显示所有子屏幕,因此您可以在此处隐藏该栏。

因此,您需要在UITabBarController中设置viewDidLoad的逻辑,因为它只应该执行一次。

关于您的应用,您有没有理由不让UITabViewController成为您的应用代表加载的控制器?您的应用程序中似乎有一个您可能需要或可能不需要的间接级别。现在简化它可能会更好,如果你需要更复杂的东西,可以稍后重构。