Log*_*Rex 3 objective-c uiviewcontroller uiview ios
我是iOS的新手并且正在处理别人的项目,我注意到呈现视图似乎有各种不同的方式.我想知道是否有人可以简要概述各种呈现视图的方式,以及何时使用哪一种,因为它们似乎都能正常工作.
例如,我遇到过的一段代码就是这样的:
[parentView addSubview:childViewController.view];
[parentView bringSubviewToFront:childViewController.view];
Run Code Online (Sandbox Code Playgroud)
使用LLDB检查childViewController,这两个返回nil:
po self.parentViewController (这是零)
po self.presentingViewController (这是零)
在其他地方,我见过这样的事情:
[parentView addSubview:childViewController.view];
[self addChildViewController:childViewcontroller];
Run Code Online (Sandbox Code Playgroud)
更进一步,在其他地方我见过这样的事情:
UIViewController *childViewController = [[SomeChildController alloc] init];
[self presentViewController:childViewController animated:YES completion:^(void){}];
Run Code Online (Sandbox Code Playgroud)
因此,如果您愿意,有时您可以拥有父视图控制器或呈现视图控制器,有时则不需要它.有这么多的选择来呈现观点,你如何决定一个在另一个,或者哪个是正确的?
实际上只有两个选项可以从ViewControllerA显示ViewControllerB,你使用它将取决于你想要实现的目标 -
如果ViewControllerB应该完全关注ViewControllerA,直到它被解除,请使用此方法.
[self presentViewController:viewControllerB animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
modalPresentationStyle您可以使用一些不同的或者您可以创建自己的过渡.但重要的是ViewControllerB将把焦点从ViewControllerA上移开,而ViewControllerA一次只能呈现一个视图控制器.ViewControllerB presentingViewController将指向ViewControllerA,ViewControllerA presentedViewController将指向ViewControllerB.
UIKit示例:UIAlertController应以模态方式呈现.
如果您希望将ViewControllerB的视图显示为ViewControllerA视图的子视图层次结构的一部分,请使用此选项.
[self addChildViewController:viewControllerB];
[self.view addSubview:viewControllerB.view];
[viewControllerB didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
如果您希望ViewControllerB仅占用ViewControllerA视图的一部分,或者您想要从ViewControllerA显示其他视图控制器的视图,请使用此技术.ViewControllerB parentViewController将指向ViewControllerA,而ViewControllerA的childViewControllers数组将包含ViewControllerB.
UIKit示例:UINavigationController使用视图控制器包含来显示它viewControllers.
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |