iOS UICollectionView之三(基本用法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS UICollectionView之三(基本用法)相关的知识,希望对你有一定的参考价值。

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    
    self.window.rootViewController = [[RootViewController alloc] init];
    
    
    [self.window makeKeyAndVisible];
    return YES;
}



@end
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end
#import "RootViewController.h"
#import "ImageViewCell.h"
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define line_gap 10
#define interitem_gap 20
@interface RootViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
{
}
@end

static NSString *identifier = @"cell";
static NSString *headerIdentifier = @"header";
static NSString *flooterIdentifier = @"floot";
@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   //创建布局对象
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    // 设置滚动的方向
    [layout setScrollDirection:UICollectionViewScrollDirectionVertical];
    //行的间隙
    layout.minimumLineSpacing = line_gap;
    //列的间隙
    layout.minimumInteritemSpacing = 10;
    //item的大小
    layout.itemSize = CGSizeMake((SCREEN_WIDTH - 2*line_gap)/3, 80);
    //创建collectionView
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[[UIScreen mainScreen] bounds] collectionViewLayout:layout];
    collectionView.backgroundColor = [UIColor greenColor];
    // 设置代理
    collectionView.dataSource = self;
    collectionView.delegate = self;
    //告诉系统将来需要创建什么样的cell(在获取cell之前必须先注册一个cell到系统中)
    [collectionView registerClass:[ImageViewCell class] forCellWithReuseIdentifier:identifier];
    // 注册头视图
    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];
    // 注册尾视图
    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:flooterIdentifier];
    [self.view addSubview:collectionView];
}
// 告诉系统一共有多少组
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}
// 告诉系统第section组有多少行
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 30;
}
// 告诉系统indexPath的第Section组的item行显示什么内容
- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
   
    ImageViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    cell.photo.image = [UIImage imageNamed:@"cellPhoto"];
    return cell;
}
//返回头headerView的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
    CGSize size = CGSizeMake(SCREEN_WIDTH, 100+line_gap);
    return size;
}
//返回头flooterView的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
    CGSize size = CGSizeMake(SCREEN_WIDTH, 100+line_gap);
    return size;
}
// 头和尾部显示的内容
- (UICollectionReusableView*)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    UICollectionReusableView *reusableView = nil;
    if (kind == UICollectionElementKindSectionHeader) {
        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier forIndexPath:indexPath];
        UIImageView *headerPhoto = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 100)];
        headerPhoto.image = [UIImage imageNamed:@"headerPhoto"];
        [reusableView addSubview:headerPhoto];
    }else if (kind == UICollectionElementKindSectionFooter){
        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:flooterIdentifier forIndexPath:indexPath];
        UIImageView *flooterPhoto = [[UIImageView alloc] initWithFrame:CGRectMake(0, line_gap, SCREEN_WIDTH, 100)];
        flooterPhoto.image = [UIImage imageNamed:@"flooterPhoto"];
        [reusableView addSubview:flooterPhoto];
    }
    return reusableView;
}


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"==%lu",indexPath.row);
}

@end
#import <UIKit/UIKit.h>

@interface ImageViewCell : UICollectionViewCell

@property (nonatomic, strong) UIImageView *photo;

@end
#import "ImageViewCell.h"

@implementation ImageViewCell

- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        self.photo = [[UIImageView alloc] init];
        self.photo.frame = self.bounds;
        [self addSubview:self.photo];
    }
    return self;
}

@end

 

以上是关于iOS UICollectionView之三(基本用法)的主要内容,如果未能解决你的问题,请参考以下文章

reloadData 不适用于 iOS7 中的 UICollectionView

UICollectionView基本使用详解(OC)

UICollectionView基本使用和常用代理方法解释

swift iOS - 快速滚动后 UICollectionView 图像混淆

UICollectionView 中的高内存使用 [重复]

iOS UICollectionView横向滑动并且横向加载数据