UIKit之UIViewController

自定义视图控制

// 我们可以根据空间重复使用的情况,自己封装一个view,提高代码的可重用性

1. 创建controller类 继承于UIViewController

// 新建viewController是MVC设计模式的一种体现(Model负责数据模型 View负责视图 Controller负责管理 Model和View)

2. 在AppDelegate.m文件中 引入创建的controller类 ,并初始化一个变量 是self.window.rootViewController = 初始化的变量
  RootViewController *rootVC =  [[RootViewController alloc]init];
  self.window.rootViewController = rootVC;
3.创建view类 ,继承于UIView
4.在创建的view类中,在这个view的.h文件中 声明 Label Button textField等 在.m文件中对所创建的 Label 或 Button 初始化
FirstView.h文件中
@property(nonatomic,retain)UILabel *myLabel;

FirstView.m文件中
- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        [self p_setUp];
    }
    return self;
}
- (void)p_setUp{
    self.myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 50)];
    self.myLabel.backgroundColor = [UIColor blackColor];
    [self addSubview:self.myLabel];
}
5. 在第2部创建的controller类的.m文件中引入view类,并在延展中申明一个view的属性 然后重写 loadView 方法
@interface RootViewController ()

@property(nonatomic,retain)FirstView *fView;

@end

@implementation RootViewController
// 必须把controller自带的view 替换成我们自定义的view ,需要在controller.m里面重写loadView 方法
- (void)loadView{
    self.fView = [[FirstView alloc]init];
    self.view = self.fView;//每个viewController都自带一个view
}
// 视图已经加载
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor redColor];// 设置view背景色
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
// 在这个里面处理内存警告问题 (处于安全性考虑)
    //重写处理内存的方法
    // 根视图已经加载过  根视图未显示
    if ([self isViewLoaded] == YES && self.view.window == nil) {
        //将根视图销毁
        self.view = nil;
    }
}

@end 

容器视图控制器

// 创建一个rootViewController 管理其他viewController
@property(nonatomic,retain)RedViewController *redView;
@property (nonatomic,retain)BLueViewController *blueView;

- (void)viewWillAppear:(BOOL)animated{
    NSLog(@"将要出现");
}
- (void)viewDidAppear:(BOOL)animated{
    NSLog(@"已经出现");
}
- (void)viewWillDisappear:(BOOL)animated{
    NSLog(@"将要消失");
}
- (void)viewDidDisappear:(BOOL)animated{
    NSLog(@"已经消失");
}
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"已经加载完成");
    self.redView = [[RedViewController alloc]init];
    self.blueView = [[BLueViewController alloc]init];
    // 添加子视图控制器
    [self addChildViewController:self.redView];
    [self addChildViewController:self.blueView];
    [self.view addSubview:self.redView.view];
    [self.view addSubview:self.blueView.view];
}
```

### 屏幕旋转
```
viewController.m文件中
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
    NSLog(@"将要旋转");
}

//当旋转导致 bounds 改变的时候,需要重写layoutsubview的方法
- (void)layoutSubviews{
    if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationMaskPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        _label.frame = CGRectMake(100, 100, 100, 200) ;
    }else{
        _label.frame = CGRectMake(50,50, 300, 100);
    }
}
```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容