我有一个导航控制器(NC)和三个视图控制器(A、B、C),导航模式如下:
NC->A->B->C
如果我从 A 转到 C 并“返回”,则 B 和 C 的 deinit 方法都会被调用。
如果我使用Unwind Segue 从 C 转到 A,则不会调用 B deinit。
不清楚为什么-我的应用程序中有另一个类似的序列,并且无论“返回”或“展开”操作如何,都会调用 deinits。
知道什么会导致 B 在展开操作后“保持活力”吗?
我有一个导航控制器(NC)和三个视图控制器(A、B、C),导航模式如下:
NC->A->B->C
如果我从 A 转到 C 并“返回”,则 B 和 C 的 deinit 方法都会被调用。
如果我使用Unwind Segue 从 C 转到 A,则不会调用 B deinit。
不清楚为什么-我的应用程序中有另一个类似的序列,并且无论“返回”或“展开”操作如何,都会调用 deinits。
知道什么会导致 B 在展开操作后“保持活力”吗?
发现问题。问题是我在 viewDidLoad 中的这一行:
definesPresentationContext = true
来自文档:确定应该为 UIModalPresentationCurrentContext 类型的演示文稿呈现哪个父视图控制器的视图。如果没有祖先视图控制器设置此标志,则演示者将是根视图控制器。
结果,中间视图(即“B”)成为根,除非它被“返回”操作解除。
为避免搜索框在视图 C 上仍然可见一瞬间,我在从用户选择中获得所选值(点击行)后searchController.active = false
,在视图 B 的 prepareForSegue 中添加。