我正在试图弄清楚应该在不同的UIViewController方法中使用什么逻辑,例如viewDidLoad,viewDidAppear,viewWillAppear,...
我的应用程序的结构是我有一个根视图控制器,它实际上没有自己的视图,而是它有一个选项卡视图控制器并加载其他视图控制器。但在将来,它可能必须加载其他视图控制器而不是标签栏控制器,具体取决于应用程序逻辑。
我的主要问题是,人们通常会在viewDidLoad,....方法中添加什么。
目前我:
viewDidLoad - 设置标签栏控制器并将其视图设置为视图控制器自己的视图
viewDidAppear - 检查用户是否已存储登录信息 如果不是 - 登录时出现 如果是这样,请登录并获取第一个标签的应用数据
我现在想弄清楚我的设置标签栏控制器的逻辑是应该进入loadView而不是viewDidLoad。
任何帮助都会很棒。在网络上找到的小例子很棒,但他们没有详细说明应该如何构建更大的应用程序。
答案 0 :(得分:3)
您不应同时实施-viewDidLoad
和-loadView
;它们用于不同的目的。如果加载NIB,则应实现-viewDidLoad
以执行加载NIB后需要执行的任何功能。如果你还没有在NIB中完成它,那么连接tabbar是合适的。
-loadView
,并且应该构建视图。
-viewWillAppear
。这是一个设置通知观察,根据自上次屏幕后已更改的模型类更新数据的好地方,以及在用户看到您之前一起行动。你不应该在这里执行任何动画。你不在屏幕上;你不能动画。由于这个错误,我看到很多动画故障。它有点工作,但看起来很奇怪。
-viewDidAppear
。这是你进行任何输入动画的地方(例如,向上滑动一个模态;不是你应该经常这样做,但我只是看了一些代码)。
-viewWillDisappear
。这是你可以做任何离开动画的地方(包括取消选择的tableview单元格等)。
-viewDidDisappar
。在这里删除任何观察结果,尽可能释放内存,尽可能地进入睡眠状态。
我在这里触摸设置和拆除观察。我在View controllers and notifications中更深入地探讨了这一点。
答案 1 :(得分:0)
viewDidLoad
视图的每个生命周期都会调用 UIViewController
一次。在用户开始与视图交互之前,您需要在其中放置需要设置和工作的内容。
viewDidAppear
。它可能不止一次被调用。一个示例是应用程序的根屏幕,使用UINavigationController
来推送和弹出视图层次结构。把东西放在那里,你每次都想做。例如,您可能希望隐藏根屏幕的UINavigationBar
,但是要显示所有子屏幕,因此您可以在此处隐藏该栏。
因此,您需要在UITabBarController
中设置viewDidLoad
的逻辑,因为它只应该执行一次。
关于您的应用,您有没有理由不让UITabViewController
成为您的应用代表加载的控制器?您的应用程序中似乎有一个您可能需要或可能不需要的间接级别。现在简化它可能会更好,如果你需要更复杂的东西,可以稍后重构。