首页 > UICollectionView之网络图片解析

UICollectionView之网络图片解析

1:将SDWebImage文件夹的类库导入工程,创建一个模型对象Model类,并声明好它的属性,再创建一个继承自UICollectionViewCell的自定义类

2:在自定义cell类中重写

- (instancetype)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];

    if (self) {

        self.imageView = [[UIImageView alloc] init];

        self.imageView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height);

        [self.contentView addSubview:_imageView];

        _imageView.backgroundColor = [UIColor blueColor];

    }

    return self;

}

 

3:创建一个增广视图的类继承自 UICollectionReusableView,然后将需要显示的控件声明成属性,重写初始化方法

- (instancetype)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];

    if (self) {

        self.headerLabel = [[UILabel alloc] initWithFrame:frame];

        self.headerLabel.textAlignment = NSTextAlignmentCenter;

        self.headerLabel.font = [UIFont systemFontOfSize:40];

        [self addSubview:_headerLabel];

    }

    return self;

}

4:在viewController的.m文件中开始编写代码

1):创建collectionView的注意事项:

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];

  然后通过layout设置相关属性

    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:[[UIScreen mainScreen] bounds] collectionViewLayout:layout];

 collectionView.dataSource = self;

//cell要显示内容的话必须注册显示的控件类

  [collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"reuse"];

      [collectionView registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];

2):解析数据

- (void)handleData {

  NSString *filePath = [ [NSBundle mainBundle] pathForSource:@"Data" ofType:@"json"];

  NSData *data = [NSData dataWithContentOfFilePath:filePath];

  NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil ] ;

  _dataArray = [[NSMutableArray alloc] initWithCapacity:0];

  for (NSDictionary *dic in array) {

     Model *model = [[Model alloc] init];

        [model setValuesForKeysWithDictionary:dic];

        [_dataArray addObject:model];

}

}

3):实现datasource的代理方法

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

    return 1;

}

 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return [_dataArray count];

}

4):实现两个非常重要的方法

a:cell的使用的方法

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"reuse" forIndexPath:indexPath];

    Model *model = _dataArray[indexPath.row];

  NSURL *url = [NSURL URLWithString:model.thumbURL];

  [cell.imageView sd_setImageWithURL:url placeholderImaeg:[UIImage imageNamed:@"3.png"]];

  return cell;

}

b:增广视图使用的方法

- (UICollectionReusableView *)

collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {

    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {

        MyCollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];//此处的类是MyCollectionReusableView

        view.headerLabel.text = @"网络图片";

        return view;

    }

    return nil;

 

 

转载于:https://www.cnblogs.com/arenouba/p/5217270.html

更多相关:

  • class str(basestring):"""str(object='') -> stringReturn a nice string representation of the object.If the argument is a string, the return value is the same object."""d...

  • 目录结构: contents structure [-] 类的基本使用专有方法继承单重继承多重继承砖石继承 1.类的基本使用 下面是类使用的一个简单案例, class person:"person 类的描述信息"def __init__(self,name="",age=0):self.name = nameself.age =...

  • 一、反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 python面向对象中的反射:通过字符串的形式操作对象相关的属性。pytho...

  • 一、set集合的方法 set不是特别常用,但是set的一些特性可以方便处理一些特殊情况。 集合(set)是一个无序不重复元素的序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 创建格式: parame = {value01,va...

  • 1>UITextField实现leftView: self.inputTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 200, 25)];self.inputTextField.delegate = self;self.inputTextField....

  • /*判断屏幕宽高比是否为16:9*/ function isScreen16to9() {return window.screen.height / window.screen.width === 9 / 16; }...

  • /*关闭、刷新、跳转、离开当前网页前提示*/ onbeforeunload = function () {return false; };  ...

  • let json = {/**判断JSON格式*/ isJSON: function (str) {if (typeof str == "string") {try {var obj = JSON.parse(str);if (typeof obj == "object" && obj) {return true;} else {...

  •   项目结构   index.js //必须要安装否则就别想运行了❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ //npm i body-parser -D & cnpm i express & cnpm i node-xlsx & cnp...

  • 一、递归 函数    为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性      在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n+=1foo(n) foo(1) 递归的最大深度 2、修改递归的最大深度     由此我们可以看出,未报错之前能看到的最大数...