zoukankan      html  css  js  c++  java
  • UIKit基础:12.使用MVC设计模式管理创建美女浏览器

    在前面, 我们运用了最简单的方法搞定了美女浏览器, 其中有涉及代码重构, 而代码重构其实就是设计模式的一种, 运用最简单的方法运作繁琐的事情, 这次我们把美女浏览器以MVC设计模式来编程, 在开始之前, 我们先来看看什么是MVC, 其实MVC就是最简单, 最实用的设计模式, 下面让我们来看看:


    我们所要遵循的MVC原则就是, 谁的事情归谁做, 比如Controller的事情就由Controller自己做, 整个应用的Controller都由它所管理, 剩下的ViewModel也是如此, 这样做的好处就是, 我们所写的代码非常的规整, 也同样方便其他人和我们合作, 还有一个好处就是, MVC三个东西都不知道对方里面有什么, 怎么实现, 只需要怎么去调用就可以了, 这也是MVC最大的好处, 因为三者之前既有联系又相互独立, 离开谁都可以生存, 好了, 下面让我们来看看修改过后的美女浏览器, 首先我们先创建一个数据类:



    现在我们来看看代码:

    ImageData.h文件

    <span style="font-size:12px;">#import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    
    @interface ImagesData : NSObject
    // 图像标题
    @property (strong, nonatomic) NSString *imageTitle;
    // 图像
    @property (strong, nonatomic) UIImage *image;
    
    // 使用数据字典初始化对象
    - (id)initWithDict:(NSDictionary *)dict;
    
    // 使用文件路径加载图像数据
    + (NSArray *)loadImageDataArrayWithPath:(NSString *)path;
    
    @end</span><span style="font-size: 18px;">
    </span>


    ImageData.m文件
    #import "ImagesData.h"
    
    @implementation ImagesData
    - (id)initWithDict:(NSDictionary *)dict
    {
        self = [super init];
        
        if (self) {
            _image = [UIImage imageNamed:dict[@"icon"]];
            _imageTitle = dict[@"title"];
        }
        
        return self;
    }
    
    + (NSArray *)loadImageDataArrayWithPath:(NSString *)path
    {
        // 1. 确认Bundle包
        NSBundle *bundle = [NSBundle mainBundle];
        // 2. 从Bundle包中获取完整文件路径名
        NSString *fileName = [bundle pathForResource:path ofType:@"plist"];
        
        // 3. 实例化一个数组,用于返回
        NSMutableArray *imageData = [NSMutableArray array];
        
        // 4. 从Plist文件加载数据,到array中
        NSArray *array = [NSArray arrayWithContentsOfFile:fileName];
        
        // 5. 循环遍历array,并创建imageData对象,然后添加到数组中
        for (NSDictionary *dict in array) {
            ImagesData *data = [[ImagesData alloc]initWithDict:dict];
            
            [imageData addObject:data];
        }
        
        // 6. 返回数组
        return imageData;
    }
    
    @end
    

    好了, 我们现在把数据类的代码写完了, 现在我们再回到ViewController.m文件里看看我们修改的代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // 1.传入plist文件名
        _imagesData = [ImagesData loadImageDataArrayWithPath:@"images"];
        // 2.设置默认图片
        [self resetPhotoInfoWithIndex:0];
    }
    

    - (void)resetPhotoInfoWithIndex:(NSUInteger)index
    {
        // 1. 设置图像
        ImagesData *data = _imagesData[index];
        [_imageView setImage:data.image];
        // 2. 设置标题
        [_imageTitle setText:data.imageTitle];
        
        // 3. 设置序号标签
        NSString *numberText = [NSString stringWithFormat:@"%ld/%ld", (index + 1), _imagesData.count];
        [_imageNumberLabel setText:numberText];
        
        // 4. 记录照片序号
        _photoIndex = index;
    }
    

    在这里代码里, 我们顺便把之前的一个小bug解决完, 上一个代码里, 我们还有一个Lable没有实现, 现在我们实现完了, 并且让ViewController工作更少的事情~~~



    好了, 这次我们就讲到这里, 下次我们继续~~

  • 相关阅读:
    5-python基础—获取某个目录下的文件列表(适用于任何系统)
    Automated, Self-Service Provisioning of VMs Using HyperForm (Part 1) (使用HyperForm自动配置虚拟机(第1部分)
    CloudStack Support in Apache libcloud(Apache libcloud中对CloudStack支持)
    Deploying MicroProfile-Based Java Apps to Bluemix(将基于MicroProfile的Java应用程序部署到Bluemix)
    Adding Persistent Storage to Red Hat CDK Kit 3.0 (在Red Hat CDK Kit 3.0添加永久性存储)
    Carve Your Laptop Into VMs Using Vagrant(使用Vagran把您笔记本电脑刻录成虚拟机)
    使用Python生成一张用于登陆验证的字符图片
    Jupyter notebook的安装方法
    Ubuntu16.04使用Anaconda5搭建TensorFlow使用环境 图文详细教程
    不同时区的换算
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4333155.html
Copyright © 2011-2022 走看看