【问题标题】:How to add an UINavigationController to an UIViewController presented as Modal如何将 UINavigationController 添加到呈现为 Modal 的 UIViewController
【发布时间】:2013-02-10 02:31:32
【问题描述】:

我的应用中有一个替代流程。这个流程从我的 firstViewController 开始,然后在这个视图中调用我的 secondViewController,如下所示:

- (IBAction)PressButton:(id)sender {

    SecondViewController *second = [[SecondViewController alloc] init];
    second.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    UINavigationController *nav = self.navigationController;
    [nav presentViewController:second animated:YES completion:nil];                              
}

在我的 secondViewController 中,我想推送我的thirdViewController。但它不起作用我尝试了这种方式:

- (IBAction)pressButton:(id)sender {

   ThirdViewController *tvc = [[ThirdViewController alloc] init];
   UINavigationController *nav = self.navigationController;
   [nav pushViewController:tvc animated:YES];

}

当我按下 secondViewController 的按钮时,没有任何反应。

我做错了什么?

我正在使用:

  • OSX 10.8.2
  • Xcode 4.6
  • iOS 6.1

【问题讨论】:

    标签: iphone xcode ios6 uinavigationcontroller presentmodalviewcontroller


    【解决方案1】:

    确保提供一个额外的导航控制器,而不是只显示第二个视图控制器。

    SecondViewController *secondViewController = [[SecondViewController alloc] init];
    
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:secondViewController];
    [[self navigationController] presentViewController:navigationController animated:YES completion:nil];
    

    【讨论】:

    • 嗨亚伦,感谢您的回答。不幸的是,当我这样做时,应用程序崩溃了。 ===>>> 原因:'应用程序试图以模态方式呈现活动控制器 。'
    • 尝试在我的示例中将navigationController 的名称更改为“secondNavigationController”或类似的名称。现在,您正在展示一个视图控制器,或者在您的情况下是一个导航控制器,两次。
    【解决方案2】:

    您必须以模态方式呈现导航控制器,并将第二个视图作为该导航控制器的根。以及从拥有视图而不是其父导航控制器调用 presentViewController。

    - (IBAction)PressButton:(id)sender {
            SecondViewController *second = [[SecondViewController alloc] init];
            second.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
            UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:second];
            [self presentViewController:navigationController animated:YES completion:nil];    
        }
    

    【讨论】:

    • 像魅力一样工作!谢谢!
    【解决方案3】:

    如果您使用情节提要,只需单击源视图 xib,Ctrl+拖动到目标(创建 Segue),从弹出菜单中选择模式。单击新创建的连接。然后在源视图控制器中为其添加名称[self performSegueWithIdentifier:@"Segue Name" sender:self];

    【讨论】:

      【解决方案4】:

      如果您想获得一个按钮以模态方式将您引导到不同的页面,您可以进入故事板或 xib 文件。控制从该按钮单击到您要转到的视图控制器。然后弹出菜单将为您提供要使用的插座类型的选项。希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 1970-01-01
        相关资源
        最近更新 更多