如何从流程中间执行导航 [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 时如何仍然显示导航栏?

ios 如何从单视图 Segue 到拆分视图控制器

IOS/Objective-C:导航栏自定义Segue效果对比Show Segue

如何从标签栏控制器执行 show segue?