iOS中自定义控制器管理

控制器管理铁则

文章通过一个小案例,演示了在iOS开发中自定义控制器管理的方法

效果图

iOS中自定义控制器管理_第1张图片


步骤二:在主控制的controller的viewDidLoad方法中加载三个控制器,并且使三个子控制器和主控制器成为父子关系

1>通过addChildViewController方法,将有可能显示的小控制器变为大控制器的子控制器

- (void)viewDidLoad {

[super viewDidLoad];

//是三个子控制器和主控制器成为父子关系

[self addChildViewController:[ViewControllerOne new]];

[self addChildViewController:[ViewControllerTwo new]];

[self addChildViewController:[TableViewControllerThree new]];

}


2>在主控制器中声明一个属性,用来记录当前正在显示的子控制器,左边一定不要写死,写UIViewController ,这样才能办到通用

@property (nonatomic, weak)UIViewController *currentController;//记录当前的控制器

3>在主控制器中添加一个contentView,大小为填充除了方跳转按钮的view的其余地方,方便我们后面做跳转动画

@property (weak, nonatomic) IBOutlet UIView *contentView; //这个view放置需要切换的页面

步骤三:需要提供一个方法,来切换子控制器

- (void)switchVC:(int)index {

1.获取index(对应按钮)位置对应控制器的view

UIViewController *controller = self.childViewControllers[index];

2.移除当前正在显示的子控制器view 

[self.currentController.view removeFromSuperview];

//设置对应的控制器view的frame值,这里设置的是填充整个contentView

controller.view.frame = self.contentView.bounds;

[self.contentView addSubview:controller.view];V

self.currentController = controller;


不建立控制器父子关系的后果:内部的小控制器可能会发生以下情况:

1>无法察觉到比较重大的系统事件发生了(比如屏幕旋转事件)

2>可能会导致self.navigationController == nil、self.tabBarController == nil

3>可能会导致[self dismissViewControllerAnimated:YES

completion:nil]无效(无法关闭

你可能感兴趣的:(iOS中自定义控制器管理)