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



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

转载于:https://www.cnblogs.com/iOSCain/p/4333155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值