我能够在另一个UIViewController的UIView中加载一个UiViewController吗?
假设UIViewControllerA有一个名为subuiview的UIView。我能否将UIViewControllerB加载到subuiview中?
谢谢!
我能够在另一个UIViewController的UIView中加载一个UiViewController吗?
假设UIViewControllerA有一个名为subuiview的UIView。我能否将UIViewControllerB加载到subuiview中?
谢谢!
iOS 5开始
在iOS 5中添加了"容器视图控制器"。您可以使用addChildViewController:
将一个视图控制器作为另一个视图控制器的子级添加。
您还需要负责将其视图添加到其父视图中。
iOS SDK文档中有详细的说明: 实现自定义容器视图控制器。
要添加子视图控制器:
childViewController.frame = ...
[self.view addSubview:childViewController.view];
[self addChildViewController:childViewController];
[childViewController didMoveToParentViewController:self];
并将其移除:
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
iOS 5之前
可以加载另一个视图控制器,将其视图作为另一个控制器视图的子视图添加。
UIViewController *subController = ...
[self.view addSubview:subController.view];
addSubview
将一个视图控制器的视图作为另一个视图的子视图一直是有问题的。特别是当人们使用它来在视图之间进行转换时,而不是依靠其他更强大的解决方案,如presentViewController
或pushViewController
。addChildViewController
、didMoveToParentViewController
等方法确保您的视图控制器层次结构与视图层次结构同步。有关详细信息,请参阅文档和视频。addSubview
,但非常重要的是,你还需要做很多其他工作,以保持视图控制器层次结构与视图层次结构同步(例如addChildViewController
等)。如果你想了解有关此主题以及为什么正确执行它很重要的良好介绍,请查看那个WWDC视频。 - Rob[self addSubview:viewControllerB.view];
在子视图中尝试这个
实际上你不能直接加载一个视图控制器,但是你可以将一个视图控制器的视图作为任何视图的子视图来加载。
你还需要保留视图控制器,以防它绑定了任何操作。否则可能会导致崩溃。
addsubview:controller.view
是你需要关注的方法。
initWithNibName:@"Xib1" bundle:nil
和initWithNibName:@"Xib2" bundle:nil
。 - Jilouc