在呈现模态视图控制器后推送导航控制器

Posted

技术标签:

【中文标题】在呈现模态视图控制器后推送导航控制器【英文标题】:Pushing a navigation controller after a modal view controller is presented 【发布时间】:2014-10-09 08:12:44 【问题描述】:

我有一个标签视图控制器,它有一个像这样的按钮,当它被按下时会出现一个模式:

PostViewController *post = [[PostViewController alloc] init];

// [self.navigationController pushViewController:post animated:YES];

// Presentation
[self presentViewController:post animated:YES completion:nil];

当模式完成后,我想关闭它并像这样推送一个新的视图控制器:

ProfilesViewController *profile = [[ProfilesViewController alloc] init];
[self.navigationController pushViewController:profile animated:YES];

但我不能在 post vc 中将其作为模态。我该怎么做?

【问题讨论】:

为什么你需要在出现之前先呈现并关闭它? 【参考方案1】:

您可以尝试使用completionBlock

在 presentViewController 完成时调用CompletionBlock

PostViewController *post = [[PostViewController alloc] init];
[con presentViewController:post animated:YES completion:^
    ProfilesViewController *profile = [[ProfilesViewController alloc] init];
    [self.navigationController pushViewController:profile animated:YES];
];

更多关于presentViewController:animated:completion:Apple Doc的信息

completion :演示完成后要执行的块。 这个块没有返回值,也没有参数。你可以 为这个参数指定 nil。

【讨论】:

好的,所以它把它推到模态后面? 它推入 navigationController 堆栈。 如果你想之前关闭你的模态,你也可以使用completionBlock添加dismissViewControllerAnimated:completion: 还有一个问题,一旦我关闭帖子,帖子数据可以显示在ProfilesViewController中吗?那么配置文件视图控制器在可见时会运行吗? 当你关闭一个 ViewController 时,它会在里面 releases all data。因此,您必须向新 VC 提供要保留的所有参数。希望这能回答你的问题【参考方案2】:

将标签视图控制器嵌入 UINavigationController 吗? 如果你没有,你当然不能使用 self.navigationController。

【讨论】:

以上是关于在呈现模态视图控制器后推送导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

在导航堆栈中以模态方式呈现视图控制器

以模态方式呈现视图控制器时,导航栏与黑色而不是白色混合

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

模态视图导航栏未正确显示

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

呈现一个模态视图控制器,但不要隐藏导航栏