• 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工作更少的事情~~~



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

  • 相关阅读:
    机器学习理解
    如何让Vim成为我们的神器
    新一代 Linux 文件系统 btrfs 简介 【转载】
    第一次写Linux下Makefile的笔记
    UEFI boot sequence
    #pragma pack
    Linux makefile sample
    解决ScrollView中嵌套ListView滚动效果冲突问题
    Android SqLite升级
    Android 播放gif图片
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4333155.html
Copyright © 2020-2023  润新知