• 视图控制器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];

    }

  • 相关阅读:
    Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具
    编程语言相关名词解释汇总
    使用Webpack对Css文件压缩处理的思考
    一种通过async/await实现函数同步执行的方式
    成长的道路上,我很幸运
    Todolist分别用React与Vue的实现与思考
    Unity 框架篇
    扇形技能指示器
    C# Socket和protoBuf新手村教程
    判断点在多边形内部
  • 原文地址:https://www.cnblogs.com/Coder-GT/p/4866391.html
Copyright © 2020-2023  润新知