我想知道UINavigationController
和UIViewController
的区别,而它们都执行选择器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。
首先,UINavigationController
是UIViewController
的子类,而UIViewController
具有模态显示视图的能力。因此,您可以从两个类中呈现。
当UIViewController
嵌入在UINavigationController
中是可见的,本质上UIViewController
和UINavigationController
都是同时可见的,并且两者都可以在技术上呈现另一个视图。
模式地呈现视图通常意味着停止你之前正在做的事情,以便做其他事情,然后回到你离开的地方-例如,更改设置。
因为你让两个视图控制器去做别的事情,你从哪个视图控制器呈现并不重要。但是,presentingViewController
将根据您所呈现的内容而有所不同,因此如果您需要该属性,则很重要。
如果模态视图控制器以某种方式与UIViewController
相关,而不是与UINavigationController
相关,那么它可能是最好的,但这真的只是一个样式的事情。