【问题标题】:Pushing a UIViewController from a modal view controller从模态视图控制器推送 UIViewController
【发布时间】:2011-05-04 22:43:15
【问题描述】:

我正在尝试制作的 iPad 应用程序中使用拆分视图控制器。

现在,我在模态视图控制器中显示了一个视图:

[self presentModalViewController:viewController animated:YES];

效果很好,但是当用户按下按钮时,我希望根视图控制器推送到另一个视图。我正在使用:

RootViewController *rvc = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
[rcv pushViewController:rvc animated:YES];

但这不起作用。我该怎么办?

--编辑

现在,我正在使用

PhotosViewController *pv = [[PhotosViewController alloc] initWithNibName:@"PhotosViewController" bundle:nil];
[self.parentViewController.navigationController pushViewController:pv animated:YES];
NSLog(@"Navigation Controller: %@", self.parentViewController.naviagtionController);

当我调用 NSLog 时,它返回 nil。这是为什么呢?

我再次使用拆分视图控制器并尝试将 RootViewController 推送到新视图。

谢谢

【问题讨论】:

    标签: iphone xcode uinavigationcontroller


    【解决方案1】:

    您的代码不起作用,因为您创建了一个 RootViewController 实例,然后尝试将其推送到自身。您应该做的是将新视图控制器推送到父视图控制器的导航控制器上:

    [self.parentViewController.navigationController pushViewController:newViewController animated:YES];
    

    【讨论】:

    • 这不起作用,我更新了帖子以显示我的新问题。
    【解决方案2】:

    我知道这是一个老问题,但我相信“现在”将视图控制器从模态视图控制器推送到主导航堆栈的正确方法是在模态视图上创建一个“didTapShowBlahViewController”委托(假设您想要用户完成现有模式视图,然后将新视图推送到堆栈上)。拥有该委托后,您只需拥有最初调用模态的视图,即可在委托被触发时执行解除模态并推送下一个视图控制器。

    - (void)didTapShowBlahViewController{
        [self dismissViewControllerAnimated:YES completion: nil];
        [self performSegueWithIdentifier:@"segueToBlahViewController" sender:self];
    }
    

    这是基于Apple's View Controller Programming Guide,它指定将数据传递给子视图控制器并使用委托将数据传回给父视图。

    仅供参考:这种方式还确保“后退”按钮不会返回到模态,而是返回到调用模态的视图,这就是模态通常的使用方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2011-01-15
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多