Father And Son ViewController

控制器父子关系的建立原则

  • 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系
[a.view addSubview:b.view];
[a addChildViewController:b];
// 或者
[a.view addSubview:otherView];
[otherView addSubbiew.b.view];
[a addChildViewController:b];

获得所有的子控制器

@property(nonatomic,readonly) NSArray *childViewControllers;

添加一个子控制器

//XMGOneViewController成为了self的子控制器
//self成为了XMGOneViewController的父控制器
[self addChildViewController:[[XMGOneViewController alloc] init]];
// 通过addChildViewController添加的控制器都会存在于childViewControllers数组中

获得父控制器

@property(nonatomic,readonly) UIViewController *parentViewController;

将一个控制器从它的父控制器中移除

// 控制器a从它的父控制器中移除
[a removeFromParentViewController];
  • didMoveToParentViewController方法
/**
 * 当前控制器已经被添加到某个父控制器上时就会调用这个方法
 */

- (void)didMoveToParentViewController:(UIViewController *)parent
{
    [super didMoveToParentViewController:parent];

    NSLog(@"didMoveToParentViewController - %@", parent);
}



    // 当一个控制器从父控制器中移除时。会自动调用控制器的didMoveToParentViewController:方法,并且参数是nil
//    [self.childViewControllers[0] removeFromParentViewController];
  • autoresizingMask属性
  // self.view == 600x600 --> 375x667
    // one.view == 100x100 --> 缩小x增大
//    NSLog(@"%@", NSStringFromCGRect(self.view.frame));

    // 默认情况下,所有控制器view的autoresizingMask属性都包含了UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight两个值
    // one.view.autoresizingMask = UIViewAutoresizingNone;

results matching ""

    No results matching ""