把子视图控制器的视图添加到父视图控制器并覆盖 添加子控制器 #pragma mark - 添加子控制器 - (void)addSubControllers{ [self addChildViewController:_childViewController ]; [self.view addSubview:_childViewController.view]; [_childViewController.view mas_makeConstraints } 把子视图控制器的视图添加到父视图控制器的指定容器视图,适当时机跳转 添加子控制器 #pragma mark - 添加子控制器 - (void)addSubControllers { _childViewController ]; _childViewController.sModel = self.sModel; } 跳转控制器 #pragma mark - 跳转控制器 - (void)gotoContentView ]; //设置默认显示在容器View的内容 [self.contentView addSubview:_childViewController.view]; } 子VC的布局约束 #pragma
loading the view, typically from a nib. } - (IBAction)btnClicked:(id)sender { // Swift文件 ChildViewController *vc = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; [self.navigationController import UIKit class ChildViewController: UIViewController { override func viewDidLoad() {
一般手写派会分出3个ChildViewController来解决臃肿问题,难道Storyboard就做不到么? 答案是否定的,很早的版本,苹果就给出了上图中的解决方案。 通过 Container View 创建的ChildViewController如何与主ViewController传参或互相调用? ChildViewController 可以通过 self.parent(Swift)|| self.parentViewController(OC)来拿到主ViewController的实例。 值得一提的是,通过此种方式创建的ChildViewController,其构造方法晚于主ViewController,但生命周期中的viewDidLoad则早于主ViewController, 因此在ChildViewController 如果需要在初始化的时候拿到主ViewController的实例,则应该在主ViewController``viewDidLoad方法中,调用ChildViewController的特定方法,把 self
main()函数之后耗时的影响因素 执行main()函数的耗时 执行applicationWillFinishLaunching的耗时 rootViewController及其childViewController 特别是在类似TabBarController这种会嵌套childViewController的ViewController的情况,它也会把部分children也初始化,因此各种viewDidLoad会递归的进行 App启动的时候,根据加载原理,会加载TabBarController、第一个Tab(“连接”)的ViewController及其所有childViewController。 由于一些历史原因,连接页的视图控制器connectingViewController包含了三个childViewController:WiFiViewController、3GViewController 至于tabBarController,检查代码后决定简单的把不相关的业务做一些迁移,优化childViewController的加载过程,不作重构。
从Storyboard中的CustomView 连线的控件属性,用来作为容器视图,显示每个ChildViewController的内容 @IBOutlet weak var containView 需要将第一个ChildViewController的view添加到容器视图中; containView.addSubview(childViewControllers[0].view)
parentVC: self, customClassType: ChildViewController.self
Container View Controller 的 view 我们可以添加一个ScrollView,每当一个新的 ViewController 需要展示,我们参考Apple的示例代码添加childViewController
setOverrideTraitCollection:(UITraitCollection *)collection forChildViewController:(UIViewController *)childViewController NS_AVAILABLE_IOS(8_0); - (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
1.创建很多ChildViewController //推荐 CY1ViewController *message = [[CY1ViewController alloc] init]; message.title
如果使用MSStickerBrowserViewController,通常将其作为MessagesViewController的childViewController;也可以被present出来显示。
//www.jianshu.com/p/9884f13074b8 Round 2 -如何做好IOS View的布局 如何做好IOS View的布局 如何布局UIViewController的view childViewController
setOverrideTraitCollection:(nullable UITraitCollection *)collection forChildViewController:(UIViewController *)childViewController ; - (nullable UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
为解决这个问题,我们可以采用另外一种方法:将屏幕空间划分为多个窗格,即采用与原生 Android、iOS 类似的 Fragment、ChildViewController 概念,来抽象独立区块的视觉功能