美文网首页
UICollectionView启示录

UICollectionView启示录

作者: Easy_VO | 来源:发表于2015-11-21 17:42 被阅读107次

UICollectionView和UITableView的纯代码启示录

一、UICollectionView的纯代码构建首先新建项目,

然后来到General->然后把Main Interface处的Main取消掉,因为我们要用纯代码创建,一丢丢的SB or Xib都不用

然后新建一个cell 继承自UICollectionViewCell的MyCollectionViewCell

上代码

//MyCollectionViewCell.h中

#import@interface MyCollectionViewCell : UICollectionViewCell

 /** 图片*/

@property (nonatomic,strong) UIImageView *topImage;

/** 文字*/

@property (nonatomic,strong) UILabel    *botlabel;

/** 按钮*/@property (nonatomic,strong) UIButton    *botbutton;

@end

//  MyCollectionViewCell.m

#import "MyCollectionViewCell.h"

@implementation MyCollectionViewCell

- (instancetype)initWithFrame:(CGRect)frame{ 

   self                      = [super initWithFrame:frame];   

 if (self) {

    _topImage                  = [[UIImageView alloc] initWithFrame:CGRectMake(10, 0, 70, 70)];    

_topImage.backgroundColor  = [UIColor blueColor];        

[self.contentView addSubview:_topImage];  

  _botlabel                  = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 70, 30)];  

  _botlabel.backgroundColor  = [UIColor yellowColor];   

 _botlabel.textAlignment    = NSTextAlignmentCenter;   

 _botlabel.textColor        = [UIColor blackColor];   

 _botlabel.font            = [UIFont systemFontOfSize:15];   

 [self.contentView addSubview:_botlabel];  

  _botbutton                = [[UIButton alloc] initWithFrame:CGRectMake(10, 120, 70, 30)];    

_botbutton.backgroundColor = [UIColor redColor];        

[self.contentView addSubview:_botbutton];   

 }   

 return self;}

@end

//在ViewController.m中

#import "ViewController.h"

#import "MyCollectionViewCell.h"

@interface ViewController (){

UICollectionView *mainCollectionView;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.view.backgroundColor = [UIColor whiteColor];

//1.初始化layout

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

//设置collectionView滚动方向

//        [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

//设置headerView的尺寸大小

layout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 100);

//该方法也可以设置itemSize

layout.itemSize =CGSizeMake(110, 150);

//2.初始化collectionView

mainCollectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];

[self.view addSubview:mainCollectionView];

mainCollectionView.backgroundColor = [UIColor clearColor];

//3.注册collectionViewCell

//注意,此处的ReuseIdentifier 必须和 cellForItemAtIndexPath 方法中 一致 均为 cellId

[mainCollectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"cellId"];

//注册headerView  此处的ReuseIdentifier 必须和 cellForItemAtIndexPath 方法中 一致  均为reusableView

[mainCollectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"reuseableView"];

//4.设置代理

mainCollectionView.dataSource = self;

mainCollectionView.delegate = self;

}

#pragma collectionview的代理方法

/**返回section的个数*/

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

{

return 5;

}

/**每一组有多少个*/

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

{

return 9;

}

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

{

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

NSString *str = [NSString stringWithFormat:@"{%ld,%ld}",(long)indexPath.section,(long)indexPath.row];

cell.botlabel.text = str;

[cell.botbutton setTitle:str forState:UIControlStateNormal];

//    cell.backgroundColor = [UIColor purpleColor];

return cell;

}

//设置每个item的尺寸

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

{

return CGSizeMake(90, 150);

}

//footer的size

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section

{

return CGSizeMake(10, 10);

}

//header的size

//- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section

//{

//    return CGSizeMake(10, 10);

//}

//设置每个item的UIEdgeInsets

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

return UIEdgeInsetsMake(10, 10, 10, 10);

}

//设置每个item水平间距

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section

{

return 10;

}

//设置每个item垂直间距

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section

{

return 15;

}

//通过设置SupplementaryViewOfKind 来设置头部或者底部的view,其中 ReuseIdentifier 的值必须和 注册是填写的一致,本例都为 “reusableView”

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

{

UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"reuseableView" forIndexPath:indexPath];

headerView.backgroundColor =[UIColor grayColor];

UILabel *label = [[UILabel alloc] initWithFrame:headerView.bounds];

label.text = @"这是collectionView的头部";

label.font = [UIFont systemFontOfSize:20];

[headerView addSubview:label];

return headerView;

}

//点击item方法

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

{

MyCollectionViewCell *cell = (MyCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];

NSString *msg = cell.botlabel.text;

NSLog(@"%@",msg);

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

最后就可以在APPdelegate.m中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

ViewController *vc = [[ViewController alloc] init];

UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:vc];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.window.rootViewController = nv;

[self.window makeKeyAndVisible];

return YES;

}

相关文章

网友评论

      本文标题:UICollectionView启示录

      本文链接:https://www.haomeiwen.com/subject/ozalhttx.html