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