我有以下环境:
- 根视图控制器是 UINavigationController
- 许多自定义 UIViewController 可能会被推送到导航堆栈上
- 每个自定义控制器可能会或可能不会呈现模态视图控制器
- 我需要能够以编程方式管理导航堆栈(例如 - 从导航堆栈中删除除根控制器之外的所有控制器,以响应某些外部事件,如推送通知传递)
[navigationController setViewControllers:newControllers animated:animated];
如果堆栈中的任何旧控制器都提供了模态视图控制器,那么幼稚的实现显然会失败:
- 此模态控制器保持可见
- 如果委托模式用于父<->模态控制器通信(父是呈现的模态视图控制器的委托),模态视图控制器中的任何操作都会导致崩溃,因为委托已经释放
所以一般的问题是模态控制器生命周期没有绑定到父控制器。我的问题是:
- 是否有管理这种层次结构和安全导航堆栈更改的标准方法?
- 如果不是,那么最好的自定义实现是什么?我看到了两种通用方法 - 一种是在更改导航堆栈的代码中显式关闭/取消链接所有模态控制器,另一种是向父视图控制器添加逻辑以直接管理模态控制器生命周期。