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;
}