【问题标题】:How to open UIViewControllers and keepstate without NavgationController如何在没有 NavgationController 的情况下打开 UIViewControllers 和 keepstate
【发布时间】:2013-10-08 07:04:45
【问题描述】:

我的应用中有 3 个视图。

我想知道点击按钮时如何正确打开和加载视图。

目前,当从第一个视图单击按钮时,我会像这样打开第二个视图

[self dismissViewControllerAnimated:NO completion:nil];

    getPLViewController = [[GetPLViewController alloc] initWithNibName:@"GetPLViewController" bundle:nil];

    UIWindow* keyWindow= [[UIApplication sharedApplication] keyWindow];
    [keyWindow addSubview:getProjectListViewController.view];

    [self presentViewController:getPLViewController animated:NO completion:nil];

现在第二个视图打开了,我像这样打开第三个视图

currentPLViewController = [[CurrentPLViewController alloc] initWithNibName:@"CurrentPLViewController" bundle:nil];


UIWindow* keyWindow= [[UIApplication sharedApplication] keyWindow];
[keyWindow addSubview: currentPLViewController.view];

[self presentViewController:currentPLViewController animated:NO completion:nil];

我不知道这是否正确,因为如果我在前一个视图完成加载之前尝试加载它,或者类似这些行的东西,我会遇到视图显示在其一侧的问题。

这就是我从视图控制器返回的方式

[self dismissViewControllerAnimated:NO completion:nil];

所以我想知道这是一种正确的做法吗?还是有更好的方法?

任何帮助将不胜感激。

【问题讨论】:

    标签: ios uiview uiviewcontroller


    【解决方案1】:

    为什么不在根视图上使用 UINavigationController ?

    你可以隐藏导航栏,它会更干净,它会符合苹果指南推送视图。

    假设您使用 XIB。 当您从AppDelegate 添加第一个视图时,添加一个UINavigationController 并隐藏这个:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
        [navigationController setNavigationBarHidden:YES];
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    

    接下来在您的RootViewController(第一个视图)上添加一个按钮并按下SecondViewController

    - (IBAction)displaySecondView
    {
        SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        [self.navigationController pushViewController:secondViewController animated:YES];
    }
    

    同样在你的SecondViewController推送第三个:

    - (IBAction)displayThirdView
    {
        ThirdViewController *thirdViewController = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
        [self.navigationController thirdViewController animated:YES];
    }
    

    以及返回上一个视图的操作:

    - (IBAction)back
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    【讨论】:

    • 好吧,说一下我在第一个视图,但我想跳到第三个视图?
    • 所以在你的第一个视图中添加- (IBAction)displayThirdView :)
    • 好吧,很酷,我要弄清楚这一切,我会告诉你我的进展情况:)
    • grr.. 我刚刚勾选和取消勾选你对不起.. 但现在我的 rootview 站在它一边。我只将其设置为横向。状态栏是横向的,但视图是纵向的.. ?!
    • 这里是另一个问题^^你需要在你的项目中设置方向deployment info并选择横向左和横向右
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多