(UINavigationController&UIViewController) 的区别 执行 dismissViewControllerAnimation



我想知道UINavigationControllerUIViewController的区别,而它们都执行选择器dismissViewControllerAnimated。事实是它们都有效。我是这样做的:

代码:

UIViewController *vc = [UIViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:nil];

在新的控制器中,我这样做:

// self.navigationController to dismiss
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
// self to dismiss
[self dismissViewControllerAnimated:YES completion:nil];

他们都工作得很好,但我不知道有什么不同?

让我们考虑第一种情况

[self.navigationController dismissViewControllerAnimated:YES completion:nil];

navigationcontroller是根视图控制器,你显式调用了带根视图控制器的解散。你可以说容器视图控制器

考虑第二种情况

[self dismissViewControllerAnimated:YES completion:nil];

在这种情况下,你是解散子视图控制器,它是嵌入在容器视图控制器。假设现在在present之后你push了一个视图控制器,现在当你调用dismissViewControllerAnimated时它会同时解散present和push。

首先,UINavigationControllerUIViewController的子类,而UIViewController具有模态显示视图的能力。因此,您可以从两个类中呈现。

UIViewController嵌入在UINavigationController中是可见的,本质上UIViewControllerUINavigationController都是同时可见的,并且两者都可以在技术上呈现另一个视图。

模式地呈现视图通常意味着停止你之前正在做的事情,以便做其他事情,然后回到你离开的地方-例如,更改设置。

因为你让两个视图控制器去做别的事情,你从哪个视图控制器呈现并不重要。但是,presentingViewController将根据您所呈现的内容而有所不同,因此如果您需要该属性,则很重要。

如果模态视图控制器以某种方式与UIViewController相关,而不是与UINavigationController相关,那么它可能是最好的,但这真的只是一个样式的事情。

相关内容

最新更新