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

步骤二:在主控制的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]无效(无法关闭
网友评论