当前位置: 首页 > 知识库问答 >
问题:

iOS-不同故事板视图控制器之间的转换

易骁
2023-03-14

我将我的项目分为两个故事板:

>

  • Main。情节提要-用于经过身份验证的用户。这也是默认的故事板。

    登录。情节提要-适用于未经身份验证的用户。

    应用程序代理文件:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        if(user is authenticated)
        {
            [self presentLoginScreen:YES];
            return YES;
        }
    

    应用委托文件中的登录屏幕:

    -(void)presentLoginScreen:(BOOL)animated{
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
        UIViewController *vc =[storyboard instantiateInitialViewController];
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.rootViewController = vc;
    }
    

    注销时,会显示登录屏幕。我在应用委托文件中定义了这个:

    -(void)logOut{
       //clear data
    
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
        UIViewController *vc =[storyboard instantiateInitialViewController];
        self.window.rootViewController = vc;
        //Show login Screen
        [self presentLoginScreen:NO];
    }
    

    从MainstryBoard的viewcontroller(比如MainstryBoardVC.m)中,注销被称为:

    -(void)didTouchLogOut{
        NSLog(@"GoodBye");
        AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
        [appDelegateTemp logOut];
    }
    

    这引起了很多问题:

    >

  • 首先,当我注销并移动到登录屏幕时,我仍然可以在后台看到main storyboardVc. m,这看起来很笨拙。

    我注销、重新登录并再次尝试注销时,会看到以下消息:

    不建议在分离的视图控制器上显示视图控制器

    不显示登录屏幕。

    我在两个故事板之间的视图控制器演示上尝试了许多答案,但没有保留历史记录,似乎什么都不起作用。。。

  • 共有2个答案

    陆伟
    2023-03-14

    两个UIViewController对象是重复的,因为您设置了self。窗rootViewController,适用于这两种类型。试试看;

    登录

    -(void)presentLoginScreen:(BOOL)animated{
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
        UIViewController *vc =[storyboard instantiateInitialViewController];
        self.window.rootViewController = vc;
        [self.window makeKeyAndVisible];
    }
    

    注销

    -(void)logOut{
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
       UIViewController *vc =[storyboard instantiateInitialViewController];
       [self presentViewController:vc animated:YES completion:nil];
    }
    
    宗政松
    2023-03-14

    要替换UIViewController,在转换根视图控制器时需要调用其他几个方法:

    目标c:

    - (void)setRootViewController:(UIViewController *) newRootViewController {
    
        UIViewController* currentViewController = self.window.rootViewController;
        if (newRootViewController != currentViewController) {
            [currentViewController willMoveToParentViewController:nil];
            [currentViewController.view removeFromSuperview];
            [currentViewController removeFromParentViewController];
            self.window.rootViewController = newRootViewController;
        }
    }
    

    迅速:

    func setRootViewController(newRootViewController: UIViewController) {
        if let currentViewController = self.window?.rootViewController {
            if currentViewController != newRootViewController {
                currentViewController.willMoveToParentViewController(nil)
                currentViewController.view.removeFromSuperview()
                currentViewController.removeFromParentViewController()
                self.window?.rootViewController = currentViewController
            }
        }
    }
    
     类似资料:
    • 我被一个问题困住了,我在官方留档、Stackoverflow或谷歌上找不到答案。 我是一名经验丰富的iOS开发人员,但不熟悉故事板。我想在当前viewcontroller上实例化一个视图,在NIB中,我将在viewcontroller外部绘制一个视图,并附加一个出口以在代码中引用它,并调用addSubview:之类的东西。在MapView委托中绘制覆盖图或详图索引视图非常有用。但我不知道如何在故事

    • 我已经通读了《iOS View Controller编程指南》和《iOS View编程指南》,如果代码或情节提要中没有大量复制,我无法找到执行以下操作的最佳方法。 我正在为我的孩子们编写一个简单的数学教程程序,其中有一个带有数字“NumberPad”(数字0-9)的视图,以及一些动画的场景。 到目前为止,我有一个视图控制器,它处理简单的加减乘除问题,工作良好。 我想为一个视图控制器使用相同的数字键

    • 我有一个需要在景观和肖像视图中呈现的视图。我使用这个解决方案来提供方向:故事板中方向的解决方案 所选视图是ViewController的视图,它有两个视图:第一个是纵向视图,第二个是横向视图。我隐藏了不符合设备方向的视图。 与图像中一样,视图、纵向视图和横向视图都有容器视图,通过segue链接到视图控制器。据我所知,故事板应该在加载主视图控制器时调用所有分段。我在方法中得到Segue调用。 如果肖

    • 我在情节提要中建立了一些视图控制器,就像下面的图片 我已经实现了它们内部的数据,modal segue用于它们之间的转换。现在我才意识到,当我按“后退”按钮时,以前的视图将无法正确加载。我想我应该切换到导航控制器,并将这些控制器添加到堆栈中。但我不知道如何从我现在的位置走下去。 我认为我应该以编程方式进行更改,因为我发现在情节提要中构建导航控制器在UI设计上不会有太大的变化(至少我不知道如何以那种

    • 我想做的是: 由父视图控制器管理的父视图不应旋转。 由子视图控制器管理的子视图应该旋转到所有方向。 我所尝试的: 家长视图控制器 儿童视图控制器 Xcode部署信息中支持的方向设置为所有四个。 我得到的: 没有视图的旋转。如果将父视图的旋转设置为“全部”,则所有视图将一起旋转。所以要么全有要么全无。 更新 当我尝试放置UIDeviceOrientationIDChangeNotification的

    • 我正在开发一个游戏,其中第一个视图控制器将包含30个视图控制器的其余部分的全部功能,其中这些控制器的其余部分将是第一个视图控制器的子部分。我的计划是为我的应用程序中的所有30个视图控制器或场景使用单个故事板,它们都将使用相同的背景图像。为了让你知道我在说什么,我在这幅画中只展示了两个场景。故事板图像,但计划是有28更多的场景在这个相同的故事板。绘图。故事板 如果此故事板中的所有30个场景都具有相同