首页 文章

viewDidLoad和viewWillAppear与标签栏控制器

提问于
浏览
3

我正在查看viewDidLoad和viewDidAppear方法以更好地理解它们的作用,我遇到了article,它使用银行应用程序的示例来解释这些方法的工作原理:

考虑一个显示您当前余额的银行应用程序 . 用户可以点击按钮,该按钮在模态视图控制器中呈现附近的ATM列表 . 为了获得附近ATM的列表,应用程序必须提出核心位置和Web服务请求 . 在这种情况下,程序员可以在viewDidLoad中从服务器请求附近的ATM列表 . 视图控制器只显示一次,viewDidLoad和viewWillAppear:将为该特定视图控制器实例重新调用一次,并且只调用一次 . 这两种方法中的代码的净效果是相同的 . 但这是个坏主意 . 考虑如果您想将ATM视图控制器移动到标签栏控制器中会发生什么 . 现在,ATM视图控制器 - 在viewDidLoad中使用其ATM提取代码仅获取ATM列表一次 . 因此,您周二在亚特兰大,打开您的申请以寻找自动柜员机,然后检查您的余额 . 然后你周三前往纽约,重新打开银行应用程序,你只能看到亚特兰大的ATM . 视图已加载,无需调用viewDidLoad,现在您正在查看过时的数据 .

遗憾的是,我仍然不完全理解如何/为什么viewDidLoad和viewWillAppear将被“背对背”调用,或者将ATM视图控制器添加到标签栏控制器意味着这些方法 .

3 回答

  • 7

    viewDidLoad 方法只会调用一次viewController的生命周期,也就是当viewController对象首次加载到内存中时 . 每当一个视图出现在屏幕上时, viewWillAppear 方法会调用,或者你可以说是topViewController ...

    Explanation :假设您有基于标签的应用,其中包含两个标签 . Tab1viewController1tab2 相关联 viewController2 . 现在,当你运行你的应用程序时,你会看到选项卡1被选中并且 viewController1 正在查看,你想要更改为 tab2 ,当你点击tab2然后 tabVieController2 的对象将创建并加载到内存第一次因此它的 viewDidLoad 方法会调用,很快就会出现在窗口中, viewWillAppear 也会调用 . 现在,如果您尝试通过单击它们来更改标签,则只会调用 viewWillAppear 方法,因为它们已经在内存中 .

  • 1

    很简单,viewDidLoad在加载视图时调用,通过 NIB ,storyboard或loadView方法 . 显示视图时会调用viewWillAppear: .

    将视图添加到选项卡栏时,它只会加载一次,因此viewDidLoad只会被调用一次 . 但是,如果用户切换到另一个选项卡并返回到同一视图,则不会调用viewDidLoad . 这是因为视图已经加载 .

    但是,在显示视图之前的两种情况下都会调用viewWillAppear: . 因此,当用户首次打开选项卡并切换回该选项卡时,将调用此选项 .

  • 11

    我认为它们指的是每次模态视图控制器出现时加载视图(因此数据不断刷新),但只有当它是标签栏的一部分时才加载(仅在应用程序启动时加载) . 虽然解释这些方法有点笨拙的例子 .

    您可能希望阅读视图控制器生命周期,以了解何时实现哪种方法:

    Responding to Display-Related Notifications

    View Loading and Unloading

相关问题