7.MVC设计模式

来源:互联网 发布:sql server msde win7 编辑:程序博客网 时间:2024/06/05 14:23

MVC 是一种设计模式

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

一般一个视图控制器 控制一个页面

1.首先创建一个继承于UIViewController的类RootViewController.h

显示控制器自带的View
给Window设置一个根视图控制器

初始化控制器
RootViewController *rootVC = [[RootViewController alloc] init];

设置根视图控制器

self.window.rootViewController = rootVC;

释放
[rootVC release];

2.在RootViewController.m中引入自定义视图

#import “LoginView.h”

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

这个方法 是加载视图的
并且 加载的 自己自带的那个View
– (void)loadView
{
调用父类的方法 去加载自身View视图

[super loadView]; 用上午的loginview 替换 控制器自带的viewLoginView *loginView = [[LoginView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];帮系统给self.view 赋值self.view  = loginView; 释放[loginView release];

}

视图已经加载完成
– (void)viewDidLoad {
[super viewDidLoad];

更改一下自身view的颜色self.view.backgroundColor = [UIColor redColor];控制器中写逻辑部分取出控制器自身的ViewLoginView *loginView = (LoginView *)self.view ;

}

屏幕旋转

屏幕横屏时 横屏布局
屏幕竖屏时 视屏布局
1.允许屏幕旋转
2.要指定屏幕旋转的方向
3.找到旋转触发的方法
4.判断屏幕方向 改变布局
5.测试一下

1.允许屏幕旋转
- (BOOL)shouldAutorotate
{
return YES;
}

2.要指定屏幕旋转的方向
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}

3.找到旋转触发的方法
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id< UIViewControllerTransitionCoordinator >)coordinator
{

NSLog(@"%@",NSStringFromCGSize(size));

}

4.重新布局子视图
frame 发生变化的时候会触发layoutSubviews
在#import “LoginView.m”里
- (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 + 20,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 + 20,self.userNameLTView.frame.origin.y,self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);}

}

接到内存警告出发的方法
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

NSLog(@"内存警告了");// 内存警告了 要干点什么// 释放已经显示过的视图 并且 不是当前显示的视图// 如果这个视图 正在被显示 那么这个view视图的window属性不是空的if ([self isViewLoaded] == YES && self.view.window == nil) {    // 把当前视图释放    self.view = nil;}

}

5.测试一下

0 0
原创粉丝点击