![](/img/trans.png)
[英]Swift custom unwind Segue from Navigation controller to View Controller
[英]Is it possible to segue from a modal view to a view that is not in the hierarchy on a Navigation Controller in swift?
在我的NavigationController的主视图中,我有一个按钮,该按钮以模态弹出一个新视图以提交帖子。 我有一个按钮可以关闭该视图,从而使用户回到主视图,但是,如果用户继续发布帖子,则希望它关闭该视图并继续在导航控制器中显示该帖子。
理想效果是在顶部具有标准导航控制器的后退按钮,当用户查看完帖子后,可以将其带回到主视图。
我尝试了几种不同的方法,但是我趋于得到一个错误,指出“警告:尝试呈现(我想要显示的视图)其视图不在窗口层次结构中!
感谢您提供任何信息!
是的,有可能。 这是我发现构建应用程序以允许该功能的最佳方法。
基本上,您将创建一个新的RootViewController,它将包含当前的UINavigationController作为子级。 我通常以编程方式在AppDelegate中设置window.rootViewController。 我还将在全球范围内引用它。
看一下苹果的文档 。 基本上,RootViewController代码如下所示:
[self addChildViewController:navController];
navController.view.frame = self.view.bounds
[self.view addSubview:self.navController.view];
[navController didMoveToParentViewController:self];
现在,每当需要显示模式视图控制器时,都可以从RootViewController而不是UINavigationBar上的当前/顶部视图控制器显示它。 这样,您就可以独立地操作UINavigtaionController,并且不会看到错误。
因此,从RootViewController呈现模态视图控制器,其中涵盖了UINavigationController及其内容(顶视图控制器)。 在没有动画的情况下,对UINavigationController堆栈进行任何所需的更改(推,弹出等)。 完成后,关闭模态视图控制器(带有动画),它将显示您已调整UINavigationController。
希望这一切都有道理。 这有点复杂,很难用文字解释。 :p
如果您不想设置RootViewController,则可能要尝试通过UINavigationController呈现模式视图控制器,因为这可能具有相同的效果。 在视图控制器中执行self.parentViewController.present。
您要避免的主要事情是从视图控制器中呈现一个模态,然后在消除模态之前删除该视图控制器(pop)。 提供视图控制器的视图控制器负责将其关闭。
我终于使一切正常(我还是Swift的新手),关于该问题的两条评论非常有帮助。 最有用的是在github上的示例的最高答案。 类似问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.