重定向到导航堆栈中间的新视图控制器
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,我认为这就是这样做的方法,因为它是堆栈中的第一个。以上是关于重定向到导航堆栈中间的新视图控制器的主要内容,如果未能解决你的问题,请参考以下文章