如何从流程中间执行导航 [segue] + ios 应用程序
Posted
技术标签:
【中文标题】如何从流程中间执行导航 [segue] + ios 应用程序【英文标题】:how to perform navigation[segue] from midle of the flow + ios application 【发布时间】:2014-11-14 08:56:36 【问题描述】:我正在开发基于导航的应用程序。我用故事板来设计我的界面。我也使用登录功能。所以在应用程序委托类中,我会根据登录状态检查用户登录的天气,我正在加载主页或登录页面。
我的问题是,当我打开这样的视图控制器时,我的其他功能不起作用。
例如,我在主页中有一个按钮,可以将其推送到另一个视图。当应用程序从主页启动时,按钮不起作用。[不推送到所需的视图]。所以我以编程方式尝试了它,但效果不佳。
这就是我的故事板的样子
这是我的应用程序委托代码,根据登录状态打开应用程序
NSUserDefaults* userinfo = [NSUserDefaults standardUserDefaults];
NSString* customer =[userinfo stringForKey:@"username"];
if((customer!=nil))
//redirect to diferent pages
// DetailPageClass *detailPage = [[DetailPageClass alloc] initWithNibName:@"DetailPageClass" bundle:nil];
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
Home *home = (Home *)[mainStoryboard instantiateViewControllerWithIdentifier:@"home"];
//LoginView *login = (LoginView *)[mainStoryboard instantiateViewControllerWithIdentifier:@"login"];
home.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
self.window.rootViewController = home;
[self.navController pushViewController:home animated:YES];
else
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
LoginView *login = (LoginView *)[mainStoryboard instantiateViewControllerWithIdentifier:@"login"];
login.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
self.window.rootViewController = login;
[self.navController pushViewController:login animated:YES];
我试图推送到如下视图(以编程方式)
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
SignUp *login = (SignUp *)[mainStoryboard instantiateViewControllerWithIdentifier:@"signUp"];
//UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:login];
// [self.navigationController presentModalViewController:passcodeNavigationController animated:YES];
[self.nav pushViewController:login animated:YES];
谁能告诉我如何以正确的方式做到这一点。我在这里遇到了什么问题..请帮助我
谢谢。
【问题讨论】:
【参考方案1】:您可以将window.rootViewController
设置为navController
,这应该可以。
【讨论】:
所以其他功能还是不行?UINavigationController *navCtl = [[UINavigationController alloc] init]; self.window.rootViewController = navCtl; [navCtl pushViewController:home animated:YES];
这对我有用。
我收到此错误:由于未捕获的异常“NSGenericException”而终止应用程序,原因:“只有当源控制器由 UINavigationController 的实例管理时,才能使用推送序列。
那是因为做push的控制器不在导航栈上,nav->A->B->C,这样可以正常工作,A->B->C会出问题,您需要通过注销self.navigationController
来检查控制器的导航控制器是否为零。
如果 self.navigationControler 为 nill 怎么办?我该怎么办?
看上面的评论,window的rootViewController是一个导航控制器。所以home的navigationController不会是nil。以上是关于如何从流程中间执行导航 [segue] + ios 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 Firebase 登录 iOS 13.2 的导航/Segue
如何使用 segue 从 UIView 导航到 UIView 控制器?
在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?