如何正确关闭模态呈现的控制器
Posted
技术标签:
【中文标题】如何正确关闭模态呈现的控制器【英文标题】:How to correctly close modal presented controller 【发布时间】:2016-09-23 11:02:27 【问题描述】:我正在使用故事板中的直接导航 segue 或从代码中调用 segue 打开一个 navigationController,但仍然在故事板上创建。
例子:
self.performSegue(withIdentifier: "addNew", sender: nil)
然后通过模态转换打开一个导航控制器。然后 NC 有几个视图控制器,它们上面都有关闭按钮,当我点击它时,它会使用以下方法关闭 NC:
self.navigationController?.dismiss(animated: true, completion: nil)
但之后当我在 TabbarController 上的不同 ViewController 之间切换或使用推送视图打开其他视图时,我得到:
Unbalanced calls to begin/end appearance transitions for
而且打开视图上的 viewWillAppear 也不会被调用。所以谁能告诉我我是否正确关闭了 NC 或者是否有其他方法可以防止错误。
编辑1: 将结束通话从 controller.navigationController?.dismiss(animated: true, completion: nil)
到 self.navigationController?.dismiss(animated: true, completion: nil) 只是为了让问题更容易。
也累了:
self.dismiss(animated: true, completion:nil)
编辑2: 从 UITabbarController 上的 NC 上的 VC 打开一个 NC 是不是很糟糕,或者将 NavigationControllers 作为 TabbarController 上的选项卡已经很糟糕了?
【问题讨论】:
self.navigationContro......
"Unbalanced calls to begin/end appearance transitions for DetailViewController" when pushing more than one detail view controller的可能重复
@Oleg Gordiichuk 不这么认为,因为如果我从不打电话给其他 NC,就不会出现问题
【参考方案1】:
您可能需要从控制器一侧关闭控制器:
// place this to the target controller, which handles you that modal view
self.dismiss(animated: true)
//completion:
或
self.dismiss(animated: true, completion:nil)
【讨论】:
有了这条线,我可以更快地解决问题,但感谢您的建议 那么,你把那条线放在哪里了?用什么方法? 我替换了 self.navigationController?.dismiss(animated: true, completion: nil) 但是在哪里,用什么方法? :) 我问的是方法,你把建议的行放在哪里。 在从导航栏中的按钮调用的方法中。方法写在当前在 NC 最上面的控制器上以上是关于如何正确关闭模态呈现的控制器的主要内容,如果未能解决你的问题,请参考以下文章