视图控制器Controller

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];

}

原文地址:https://www.cnblogs.com/Coder-GT/p/4866391.html