推送UINavigationViewController并推送UIViewController(仅显示一个动画)

时间:2014-10-10 08:19:13

标签: ios objective-c

我有一个 UINavigationViewController ,它有一个 UITableViewController 和root视图。当用户选择一个单元格时,会推入 UIViewController

My Main UIViewController 有一个按钮,以模态方式显示 UINavigationViewController ,但我还有另一个按钮,我想用它来直接进入推送的 UIViewController UINavigationViewController

通过使用以下代码,两个动画都会显示, UINavigationViewController 首先发生,完成后会发生 UIViewController

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
UINavigationController *navController = [mainStoryboard instantiateViewControllerWithIdentifier: @"SettingsNavigationController"];

UIViewController *viewController = [mainStoryboard instantiateViewControllerWithIdentifier: @"MyInfoViewController"];


[self presentViewController:navController
                   animated:YES
                 completion:^
{
    [navController pushViewController:viewController animated:YES];
}];

这看起来不错,但我想要的是只用1个动画(甚至没有动画)显示推送的 UIViewController ,好像我的主视图正在呈现它,但保持功能的时候用户按下 UIViewController ,返回 UINavigationViewController

如果我同时设置"动画"为NO, UIViewController 显示非常快,但仍然可以看到 UINavigationViewController 的一瞥。

我遇到的一个可能的解决方案是拍摄"快照"主视图并将其传递给 UINavigationViewController ,以便在想要的 UIViewController 出现时使用它隐藏其内容。

注意:它适用于iOS 7和8

2 个答案:

答案 0 :(得分:1)

在呈现导航控制器之前,不使用动画推动视图控制器。

答案 1 :(得分:1)

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
UINavigationController *navController = [mainStoryboard instantiateViewControllerWithIdentifier: @"SettingsNavigationController"];

UIViewController *viewController = [mainStoryboard instantiateViewControllerWithIdentifier: @"MyInfoViewController"];

[navController pushViewController:viewController animated:NO];

[self presentViewController:navController animated:YES completion:nil];