繁体   English   中英

是否可以快速从模态视图选择到导航控制器上不在层次结构中的视图?

[英]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
    • UINavigationViewController
      • ContentViewController(您当前的“主”视图控制器)

基本上,您将创建一个新的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM