CollectionViewController 集合视图

 CollectionViewController 集合视图

    UICollectionView, 继承于UIScollView, 可以滚动, iOS6才出现, UITableView的用法非常相似

    tableView

    dataSource: 显示数据

    delegate: 样式触发方法

    collectionView

    dataSource: 显示数据

    delegate: 触发方法

    UICollectionViewLayout: 样式

    UICollectionViewLayout, 继承于NSObject, 控制集合视图的样式, 是一个抽象基类, 可以使用它的子类

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

static NSString *identifier = @"cell";
static NSString *header = @"Header";
static NSString *footer = @"Footer";
    cell大小, 默认(50, 50)
    flowLayout.itemSize = CGSizeMake(80, 100);
    滚动方向(水平滚动, 垂直排列; 垂直滚动, 水平排列)
     flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    最小行间距
    flowLayout.minimumLineSpacing = 20;
    最小列间距
    flowLayout.minimumInteritemSpacing = 10;
    分区间距
    flowLayout.sectionInset = UIEdgeInsetsMake(20, 10, 10, 10);
    区头大小
    flowLayout.headerReferenceSize = CGSizeMake(375, 50);
    区尾大小
    flowLayout.footerReferenceSize = CGSizeMake(375, 40);
    集合视图的创建
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:flowLayout];
    collectionView.backgroundColor = [UIColor colorWithRed:0.983 green:1.000 blue:0.598 alpha:1.000];
    collectionView.dataSource = self;
    collectionView.delegate = self;
    注册cell
    [collectionView registerClass:[PhotoCell class] forCellWithReuseIdentifier:identifier];
    注册区头
    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:header];
    注册区尾
    [collectionView registerClass:[FooterView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footer];
    [self.view addSubview:collectionView];
    [collectionView release];

#pragma mark - UICollectionViewDataSource

分区的item个数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 100;
}
展示cell的时候执行, 创建cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    从复用池找cell
    PhotoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
  UICollectionViewCell, 继承于UICollectionReusableView
//    cell.contentView.backgroundColor = [UIColor greenColor];

  tableView中的indexpath(section, row)
  collectionView中的indexpath(section, item)

    展示数据
    cell.imageView.image = [UIImage imageNamed:@"lufei.jpg"];
    cell.textLabel.text = [NSString stringWithFormat:@"路飞%ld", indexPath.item];
    return cell;
}

分区个数, 默认1
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 3;
}

创建附加视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    附加视图: 区头, 区尾
    kind, 用于区分区头和区尾
    区头: UICollectionElementKindSectionHeader
    区尾: UICollectionElementKindSectionFooter
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        区头
        UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:header forIndexPath:indexPath];
        headerView.backgroundColor = [UIColor colorWithRed:0.750 green:0.984 blue:0.814 alpha:1.000];
        return headerView;
    } else {
        区尾
        FooterView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:footer forIndexPath:indexPath];
        footerView.label.text = @"一场说走就走的旅行";
        return footerView;
    }
}

#pragma mark - UICollectionViewDelegate

选中那个item
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%ld %ld", indexPath.section, indexPath.item);
}

#pragma mark - UICollectionViewDelegateFlowLayout

item的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0) {
        return CGSizeMake(170, 100);
    }
    return CGSizeMake(80, 100);
}

分区间距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(10, 10, 10, 10);
}

效 果 图

源代码

storyboard上创建的视图

CollectionViewController.m
#import "CollectionViewController.h"
#import "JokeCell.h"
#import "Joke.h"
#import "UIImageView+WebCache.h"
@interface CollectionViewController ()
@property (nonatomic, retain) NSMutableArray *jokeArray;
@end
@implementation CollectionViewController
static NSString * const reuseIdentifier = @"Cell";

- (void)dealloc
{
    [_jokeArray release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self netWork];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)netWork {
    异步get请求
    NSURL *url = [NSURL URLWithString:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (!data) {
            return;
        }
        JSON解析
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
//            NSLog(@"%@", dic);
        self.jokeArray = [NSMutableArray arrayWithCapacity:11];
        for (NSDictionary *dictionary in dic[@"list"]) {
            Joke *joke = [[Joke alloc] initWithDictionary:dictionary];
            [self.jokeArray addObject:joke];
            [joke release];
        }
//        NSLog(@"%@ %ld", _jokeArray, self.jokeArray.count);
        重新加载数据
        [self.collectionView reloadData];
    }];
}

#pragma mark <UICollectionViewDataSource>

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.jokeArray.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    JokeCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    Joke *joke = self.jokeArray[indexPath.item];
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:joke.cover_path]];
    cell.titleLabel.text = joke.tname;
    return cell;
}
自定义cell
@interface JokeCell : UICollectionViewCell
@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@property (retain, nonatomic) IBOutlet UILabel *titleLabel;
@end

数据封装

Joke.h
#import <Foundation/Foundation.h>
@interface Joke : NSObject
@property (nonatomic, retain) NSString *cover_path, *tname;
- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary;
@end
Joke.m
#import "Joke.h"
@implementation Joke
- (void)dealloc
{
    [_cover_path release];
    [_tname release];
    [super dealloc];
}
- (NSString *)description
{
    return [NSString stringWithFormat:@"name: %@ cover_path: %@", _tname, _cover_path];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {

}
- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary {
    if (self = [super init]) {
        [self setValuesForKeysWithDictionary:otherDictionary];
    }
    return self;
}
@end

总           结 

1.搭建页面和控件

页面: UIViewController, UITableViewController, UICollectionViewController

结合展示的内容, 选择系统控件, 如果系统没有提供, 就自定义控件

2.数据

a.数据来源(本地, 网络)

本地: 文件, 数据库

网络: API(GET, POST)

 b.数据模型(自定义类)

c.数据封装(数组, 字典, 自定义类组合起来)

3.展示数据

一般控件, 直接显示

tableView, collectionView, reloadData

4.页面间的切换(设计图)

UINavigationController, push/pop

UITabBarController

模态切换, present/dismiss

5.页面间传值

属性传值

delegate传值/block传值

单例传值

 

时间: 2024-11-02 21:41:14

CollectionViewController 集合视图的相关文章

集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍

  1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectionView,功能几乎和UITableViewController差不多,能够以多行多列的形式展示数据. 集合视图UICollectionView继承至UIScrollView,也同tableView一样有两个协议,分别是UICollectionViewDataSource数据源协议和UIColl

集合视图(UICollectionView)

集合视图的四个组成部分: 单元格:它是集合视图中的一个单元格. 节:它是集合视图中的一个行数据,由多个单元格构成 补充视图:它是节的头和脚 装饰视图:集合视图中的背景图. UICollectionView继承自UIScrollView.有两个协议:UICollectionViewDelegate委托协议和UICollectionViewDataSource数据源协议. UICollectionViewCell是单元格类,它的布局是有UICollectionViewLayout类定义的,它是一个抽

集合视图

集合视图是iOS 6推出的新视图,克服了表视图中一行只能显示一个单元的缺陷.下面来简单看看怎么使用集合视图,一共有5个步骤,如下: 1.自定义单元 2.配置视图控制器 3.内容单元 4.实现流式布局 5.分区标题视图 接下来,看看每一步的操作. 自定义视图 继承UICollectionViewCell,定义自己的属性 ContentCell.h ```objc import @interface ContentCell : UICollectionViewCell @property (stro

iOS基础之CollectionView(集合视图)

在iOS6.0之后,苹果推出了?个新的继承于UIScrolleriew的一个视 图,UICollectionView,也被称之为集合视图.和UITableView共同作为 在开发中常常用的两个视图,常常作为项目的主界面出现. 代码演示: #import "YourCollectionViewCell.h" @implementation YourCollectionViewCell -(instancetype)initWithFrame:(CGRect)frame{ self = [

UICollectionView 集合视图用法,自定义Cell

在View里面 //1.创建UICollectionViewFlowLayout UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init]; //设置 //1.1设置大小 flowLayout.itemSize=CGSizeMake(90, 90); //1.2设置左右间距(注意如果给定间距,无法满足屏幕的宽度,设置无效) flowLayout.minimumInteritemSpacing=

ios学习记录 day42 UI18 集合视图

集合视图UICollectionView 简单来说就是多列的TableView 它们同样是datasource和delegate设计模式UICollectionViewLayout是一个对View布局和行为描述的类  UICollectionViewFlowLayout是它的子类 ios学习记录 day42 UI18 集合视图,码迷,mamicode.com

第二十一讲.UICollectionView(集合视图)以及瀑布流效果, 通知中心(NSNotificationCenter).

一.集合视图(UICollectionView) 1.集合视图的概念 2.如何创建 3.集合视图的布局UICollectionViewFlowLayout 4.自定义cell和 布局协议UICollectionViewDelegateFlowLayout 使用时cell一般选择自定义,而在布局时候要使用代理. UICollectionView的基本使用示例代码分析: #import "ViewController.h" #import "CollectionReusableV

UICollectionView 集合视图

创建集合视图 UICollectionView * cView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, 320, 568  ) collectionViewLayout:flowLayout];    cView.dataSource = self;  设置 dataSource 代理    cView.delegate = self;      设置delegate 代理    [self.view addSubvie

iOS集合视图单元格高亮和选中的区别

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明. 如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 集合视图(Collection View)拥有一个遵守UICollectionViewDelegate协议的delegate属性.该委托属性将从集合视图接收到各种委托调用