当从一个视图控制器转换到另一个视图控制器时,视图方法的调用顺序是什么?

3
当我从一个视图控制器(我们称之为MasterViewController)转换到另一个视图控制器(称为DetailViewController)时,每个控制器上的viewWillDisappear:viewWillAppear:等方法的调用顺序是什么?
我怀疑在我的主视图消失时调用的一些清理代码正在干扰我的详细视图中的初始化代码。我已经查阅了苹果的文档,但找不到涉及此类多个视图控制器的任何信息。
1个回答

9
我创建了一个简单的基于UINavigationController的项目,并添加了一些NSLog语句以找出它们被调用的顺序。
1. Master prepareForSegue: 2. Detail viewDidLoad 3. Master viewWillDisappear: 4. Detail viewWillAppear: 5. 显示新视图(有或没有动画) 6. Master viewDidDisappear: (动画完成后) 7. Detail viewDidAppear:
然而,当使用UITabViewController在视图之间切换时,顺序是不同的:
1. SecondTab viewDidLoad 2. SecondTab viewWillAppear: 3. FirstTab viewWillDisappear: 4. 显示新视图。 5. FirstTab viewDidDisappear: 6. SecondTab viewDidAppear:
因此,您不能总是指望这些事件以相同的顺序发生 - 它可能会因您正在转换的视图控制器的性质而有所不同。
这里有什么重要的点我错过了吗?

如果视图控制器正在被解除显示并且具有完成处理程序,则在 viewDidDisappear 之后调用它。更多信息请参见 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss 在讨论部分 :) - hariszaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接