MVC
mvc的出现,是为了将视图(view)与数据(model)两者之间进行解耦合(就是尽量让代码之间相互关联尽量减少)。M层位model,属于数据类,V层为界面,直接与用户交互;C层为控制器,用于对model和view之间的交互进行控制。
mvc是一种设计模式,目前在市场上的软件开发中,广泛使用mvc模式,对软件进行分层,便于维护(就是哪里有问题就去哪个模块找原因),便于逻辑控制。
视图控制器的功能:
1、接管分担APPdelegate的工作;
2、显示视图
3、响应事件(包括button点击事件、各种输入框,屏幕事件等等)
4、控制model层与视图层的交互
使用controller的几个步骤:
1、创建***ViewController类
2、在Appdelegate类中,创建***ViewController的对象
3、设置window的根视图控制器(这个根视图控制器就把window全部覆盖了。也就是我们不再直接把以后的子视图放在window上了,而是放在这个视图控制器自动生成的一个view上,这个view把window覆盖)。
4、创建一个我们自定义的类MyView,继承于UIView,重写初始化方法,添加子视图布局。
5、***Viewcontroller类中声明MyView的属性(在延展里声明)
6、dealloc调MyView的属性
7、重写loadview方法,在这个方法中,创建Myview对象,并替换掉控制器自动生成的view。
ViewController.h
创建视图控制器,继承于UIViewController
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
ViewController.m
在延展中声明MyView的属性。把视图控制器生成view替换成MyView的属性的属性。
#import "ViewController.h"
#import "MyView.h"
// 延展
@interface ViewController ()
// 要替换的view
@property(nonatomic ,retain)MyView *mV;
@end
@implementation ViewController
// 加载视图
- (void)loadView{
// 创建要替换的视图
self.mV = [[[MyView alloc]initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// 替换视图
self.view = _mV;
}
// 加载完视图
- (void)viewDidLoad {
[super viewDidLoad];
}
MyView.h
创建MYView类,继承于UIView,这个类用来定义我们自己的视图。不再受试图控制器生成的view的约束
#import <UIKit/UIKit.h>
@interface MyView : UIView
@end
MyView.m
#import "MyView.h"
@implementation MyView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self p_setupView];
}
return self;
}
- (void)p_setupView{
// 设置背景色
self.backgroundColor = [UIColor redColor];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
label.backgroundColor = [UIColor yellowColor];
[self addSubview:label];
[label release];
label = nil;
}
@end
AppDelegate.h
代理类
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (retain, nonatomic) UIWindow *window;
@end
AppDelegate.m
设置根视图控制器,创建ViewController类的对象,用controller的view代替window。
#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]]autorelease];
self.window.backgroundColor = [UIColor whiteColor];
// 创建ViewController
ViewController *rootVC = [[ViewController alloc]init];
self.window.rootViewController = rootVC;
// 设置根视图控制器
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[self.window release];
[super dealloc];
}