重定向到导航堆栈中间的新视图控制器

Posted

技术标签:

【中文标题】重定向到导航堆栈中间的新视图控制器【英文标题】:Redirect to new view controller in the middle of navigation stack 【发布时间】:2014-11-03 08:37:01 【问题描述】:

我对 ios 中的导航视图控制器和堆栈相当陌生。请帮我解决这个问题,尝试搜索了很长时间没有找到任何相关的内容。

我有一个 LoginViewController、一个用于侧边菜单操作的 SWRevealViewController、一个 FirstViewController(导航堆栈中的第一个)和一个 SecondViewController(导航堆栈中的第二个)。

我必须在 LoginViewController 中执行以下操作,假设 login 和 found 是两个布尔变量:

if (login && !found) 
//redirect to FirstViewController : the following works
[self presentViewController:swReveal animated:NO completion:nil];

else if (login && found) 
//redirect to SecondViewController

请帮我填写 else if。非常感谢您的宝贵时间!

【问题讨论】:

那么,您实际在哪里使用 FirstViewController,如果您不展示它,为什么需要它?也许包括你的故事板的截图,让你的要求更清楚。 如果我找到的变量为假,我需要 FirstViewController。具体的应用是如果手机在附近发现了一个beacon然后found=YES,那么就重定向到SecondViewController。 SecondViewController 是 FirstViewController 的一个 DetailView Cell,它是一个 tableView。 【参考方案1】:

所以根据我从您的 cmets 中了解到的情况,FirstViewController 是 TableViewController 的子类,而 SecondViewController 是 DetailView。

因此,基于此,“重定向”到 DetailView (SecondViewController) 的最佳方法是在 Storyboard 上创建一个 segue,然后在加载 FirstViewController 后以编程方式调用该 segue(在其 viewDidLoad 中)

在这两种情况下,您都将首先显示 FirstViewController,然后根据 if 语句,您将停留或转到 SecondViewController。

所以第一步:从情节提要中创建转场,并给它一个标识符。

第二:在加载 FirstViewController 时以编程方式执行该 segue(当然,if 语句是有效的),使用:

[self performSegueWithIdentifier: @"MySegue" sender: self];

关于该主题的更多信息:

Alternative ways to push view controllers with storyboard programmatically

Creating a segue programmatically

【讨论】:

非常感谢您的回答。所以这意味着我必须通过 FirstViewController 对吗?我不能直接去 SecondViewController.. ?理想情况下,我想这样做。根据这个在LoginViewController中,如果找到信标,我将一些FirstViewController的变量设置为true,并且在FirstViewController的viewDidLoad中,如果变量为true,我执行Segue。 是的,如果您想返回 FirstViewController,我认为这就是这样做的方法,因为它是堆栈中的第一个。

以上是关于重定向到导航堆栈中间的新视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 segue 从一个视图控制器重定向到另一个视图控制器

Cakephp 内部从控制器重定向到另一个控制器

MonoRail 重定向到 # 锚点

从 MVC 4 控制器重定向到 .aspx 页面

服务器重定向和客户端重定向

单击推送通知时,正确重定向到选项卡栏导航控制器内的视图控制器