【问题标题】:addChildViewController and remove itaddChildViewController 并删除它
【发布时间】:2012-01-17 18:45:12
【问题描述】:

在我项目的主 ViewController 中,一旦应用程序的用户单击“开始”按钮,我将下一个视图添加到屏幕:

UIViewController *nextController = [[GamePlayViewController alloc] initWithNibName:@"GamePlayView" bundle:nil];
[self addChildViewController:nextController];
[self.view addSubview:nextController.view];

现在,当用户想要点击返回主菜单时,应该运行什么代码?

我知道我可以从一个 viewController 转换到另一个 viewController,如下所示:

[self transitionFromViewController:currentPageController 
                      toViewController:nextController 
                              duration:0 
                               options:UIViewAnimationOptionTransitionCurlDown
                            animations:nil 
                            completion:^(BOOL finished) { [nextController didMoveToParentViewController:self]; }];

但如果我只想转换回项目的主 ViewController 怎么办?

谢谢!

【问题讨论】:

    标签: iphone uiviewcontroller transition addchild


    【解决方案1】:

    你为什么不直接使用

     [self presentModalViewController:currentPageController  animated:YES];
    

    当你想回来时使用

        [self dismissModalViewControllerAnimated:YES];
    

    !!!

    【讨论】:

    • 感谢您的回答并提供实际代码 - 这是我用于此特定应用程序的代码
    【解决方案2】:

    您为什么要重新发明轮子?
    只需使用导航控制器并推送第二个视图控制器。
    或者,如果在您的情况下不适合使用导航控制器,那么您可以将第二个视图控制器作为模态视图打开并在完成后将其关闭...

    【讨论】:

    • 我不知道...我从来没有使用过导航控制器,我总是从一个视图控制器转换到另一个视图控制器。导航控制器不只能前后移动吗?如果我想要一个程序进入主菜单 -> GamePlay -> 结果屏幕 -> 返回主菜单(不返回 GamePlay 屏幕)怎么办?导航控制器可以做到这一点吗?我只是按照我目前的方式从 ResultsViewController 转换到 MainMenuViewController。
    • @ObjectiveFlash,是的,导航控制器可以做到这一点。你可以使用pushViewController:animated:popViewControllerAnimatedpopToRootViewController(你问过的)、popToViewController:animated:。在使用导航控制器时,您还将收到viewWillApearviewWillDisapear 回调以及使用自定义转换不会收到的其他一些回调(无需额外代码)。导航控制器没有涵盖的场景很少,而您的情况不是其中之一。
    • 感谢您的解释 - 导航控制器是否会自动在屏幕顶部添加栏,以便用户从一个视图单击“返回”到另一个视图?我不喜欢这些自动栏,我为应用程序创作了所有我自己的艺术作品,包括后退按钮等。有没有简单的方法可以去除?我会将您的答案标记为正确,尽管对于这个特定的应用程序,我使用了您的第二个建议并将第二个视图作为模式视图打开,因为我在这个特定的应用程序中只有两个视图。
    • 您可以通过[self.navigationController setNavigationBarHidden:YES]; 轻松隐藏导航栏。但我建议离开它并改变它的外观和感觉。您可以隐藏后退按钮,添加自己的左(而不是后退)和右按钮,如果您想在标题中放置的不仅仅是文本,设置一个 titleView,更改导航栏的 tintColor 等。对于 iOS5,您可以轻松修改整个应用中所有导航栏和按钮的UI。对于所有 iOS 版本,您可以继承 navigationBar,覆盖 drawRect,并绘制图像而不是常规栏
    • 你如何“打开第二个视图控制器作为模态视图并在完成后将其关闭”?
    【解决方案3】:

    您可以使用下面的代码来做到这一点:

    [self willMoveToParentViewController:nil];
    [self.view removeFromSuperview];
    [self removeFromParentViewController];
    

    self 是你的view controller

    对我来说很好用!

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2015-11-27
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多