[TwistedFate]MVC视图控制器

来源:互联网 发布:徐州专业淘宝摄影 编辑:程序博客网 时间:2024/05/16 08:49

MVC

基本介绍

  • UIViewController是MVC设计模式的核⼼。
  • MVC是⼀个框架级的设计模式。
  • M是Model,主要⽤于建⽴数据模型(即数据的结构)
  • V是View,我们能看到的所有控件都是view,view主要的功能是展⽰数据。
  • C是控制器,主要是控制M和V的通信
    一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

优点

让视图(View)可以复用

应用

首先 视图层
1. 视图层(view) 只写视图的布局
2. 数据模型层(model) 只写数据的结构(以NS开头)
3. 控制器(controller)负责逻辑部分(例如从model里取数据 然后去更改视图显示)
MVC 把工程中的代码模块化(降低耦合度) 尽量然视图部分的代码可以复用
一般一个视图控制一个页面

视图控制器

每一个视图控制器 都自带一个view
这个view和屏幕一样大

loadView方法

每一个视图控制器 都自带一个View
并且这个View跟屏幕一样大

- (void)loadView{// 这个方法是加载视图的 并且加载的是自身的View// 调用父类的方法 去加载自身的View// [super  loadView];// 用之前的LoginView替换 控制器自带的View    LoginView *logview = [[LoginView alloc] initWithFrame:[UIScreen mainScreen].bounds];    logview.tag = 1000;    // 帮系统给self.view赋值    self.view = logview;    [logview release];}

viewDidLoad

视图已经加载完成

 1. (void)viewDidLoad{    [super viewDidLoad];    //  控制器中写逻辑部分    // 更改一下自身的颜色    self.view.backgroundColor = [UIColor grayColor];    LoginView *loginView = (LoginView *)self.view ;    [loginView.loginButton addTarget:self action:@selector(button:) forControlEvents:(UIControlEventTouchUpInside)];}

didReceiveMemoryWarning

 2. (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    NSL(@"内存警告");    // 内存警告 做什么    // 释放已经显示过的视图 并且不是当前显示的    // 如果这个视图正在被显示 那么这个视图的window属性就不为空    if([self isViewLoad] == YES && self.view.window == nil){    // 把当前视图释放    self.view = nil;    }}

检测屏幕旋转

屏幕旋转
- 屏幕横屏时 改变原来的布局
- 屏幕竖屏时 屏幕竖屏时 变回原来的布局
1. 允许屏幕旋转

- (BOOL)shouldAutorotate{    return YES;}
  1. 指定屏幕旋转的方向
- (NSUInteger)supportedInterfaceOrientations{    // 制定屏幕旋转方向    return UIInterfaceOrientationMaskAll;}
  1. 找到旋转触发的方法
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{    // 打印屏幕大小    NSLog(@"%@",NSStringFromCGSize(size));}
  1. 判断屏幕方向 更改布局
// 重新布局子视图// frame发生变化的时候会触发layoutSubViews方法- (void)layoutSubviews{    // 因为不知道父类这个方法做了什么    // 所以需要在重写的时候先调用父类的方法 然后再写自己需要写的方法    [super layoutSubviews];    // 更改布局 frame发生变化 相当于横屏了    // 此时 需要重新布局    // 判断竖屏 还是 横屏    // 1.把应用程序取出来    // 2.判断一下当前应用程序 屏幕的朝向    // 取出应用程序    // 单例方法命名规范share----    UIApplication *app = [UIApplication sharedApplication];    // 判断方向    if (app.statusBarOrientation == UIInterfaceOrientationPortrait || app.statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {        NSLog(@"竖着");            self.passWordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x, self.userNameLTView.frame.origin.y + self.userNameLTView.frame.size.height + kRowHeight, self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);    }else {        NSLog(@"横着");            self.passWordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x + self.userNameLTView.frame.size.width + 10, self.userNameLTView.frame.origin.y , self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);    }}
  1. 测试一下
0 0
原创粉丝点击