自定义UICollectionView

1.创建一个UICollectionView工程,点击鼠标右侧按钮选择New File->Cocoa Class->点击Next,Class选项填写一个合理的名称,如:MyCollectionViewCell,然后点击Next。

2.AppDelegate.m文件中导入头文件“#import “ViewController.h””,然后填写如下代码:

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

UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];

self.window.rootViewController=nav;

return YES;

}

3.ViewController.m文件代码

#import "ViewController.h"

#import "MyCollectionViewCell.h"

#import "Header.h"

@interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>{

UICollectionView  *mainCollectionView;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor=[UIColor whiteColor];

self.navigationController.navigationBar.translucent=NO;

self.navigationController.navigationBar.barTintColor=[UIColor purpleColor];

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

//设置headerView的尺寸大小

layout.headerReferenceSize = CGSizeMake(WIDTH, 0);

//该方法也可以设置itemSize

layout.itemSize =CGSizeMake(90, 150);

mainCollectionView=[[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];//初始化

//注册UICollectionViewCell

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

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

mainCollectionView.dataSource=self;

mainCollectionView.delegate=self;

mainCollectionView.backgroundColor=[UIColor whiteColor];

[self.view addSubview:mainCollectionView];

}

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

return 3;

}

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

return 9;

}

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

static NSString *[email protected]"cell";

MyCollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

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

cell.imageView.image=[UIImage imageNamed:@"photo"];

cell.backgroundColor=[UIColor yellowColor];

return cell;

}

//设置每个item的尺寸

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

//    return CGSizeMake(90, 130);

//}

//设置每个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;

}

//设置两个组之间的列间距

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

return 15;

}

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

//width的设置对该方法无影响

return CGSizeMake(300, 30);

}

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

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

{

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

headerView.backgroundColor =[UIColor grayColor];

//解决重用机制的bug

for (UIView *view in headerView.subviews) {

[view removeFromSuperview];

}

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

if (indexPath.section==0) {

label.text = @"食品类";

}

if (indexPath.section==1) {

label.text = @"水果类";

}

if (indexPath.section==2) {

label.text = @"家用类";

}

label.font = [UIFont systemFontOfSize:20];

[headerView addSubview:label];

return headerView;

}

@end

4.MyCollectionView.h文件代码

#import <UIKit/UIKit.h>

@interface MyCollectionViewCell : UICollectionViewCell

@property(nonatomic,strong)UIImageView *imageView;

@property(nonatomic,strong)UILabel     *nameLable;

@end

5.MyCollectionView.m文件代码

#import "MyCollectionViewCell.h"

@implementation MyCollectionViewCell

-(instancetype)initWithFrame:(CGRect)frame{

self=[super initWithFrame:frame];

if (self) {

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

[self addSubview:_imageView];

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

_nameLable.textAlignment=NSTextAlignmentCenter;

_nameLable.textColor=[UIColor blueColor];

_nameLable.font=[UIFont systemFontOfSize:16];

_nameLable.backgroundColor=[UIColor grayColor];

[self addSubview:_nameLable];

}

return self;

}

@end

6.效果图如下:

时间: 2024-10-08 06:01:22

自定义UICollectionView的相关文章

自定义UICollectionView布局-01

自定义UICollectionView布局-01 0.应用场景: 项目中经常会用到各种各样的cell,有时自定义cell已经无法满足产品的需求,我们可以选择复杂并且开发难度大的开发方式解决问题,当然也可以选择简单但是有技巧的解决方案,其中自定义UICollectionView布局就是一种很好的方式,这节就探讨如何使用自定义UICollectionView布局做出漂亮的界面. 1.继承方案 1> 继承UICollectionViewLayout 2> 继承UICollectionViewFlow

使用纯代码定义UICollectionView和自定义UICollectionViewCell

1.自定义UICollectionView 2.实现<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout,UICollectionViewDelegate>协议 UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init]; flowLayout.itemSize=CGSizeMake(60,60); [flowLayout

UICollectionView学习总结

1?? UICollectionView与UITableView的区别:布局 UICollectionView与UITableView的共同点:循环利用 —> UITableView继承UISCrollView 注意:          —> UICollectionView 初始化必须要传入布局 UICollectionViewLayout UICollectionViewFlowLayout 流水布局:九宫格布局 —> UICollectionViewCell必须要注册      

关于自定义UICollectionViewLayout的一点个人理解&lt;一&gt;

自定义UICollectionView,主要会用到以下几个方法: - (void)prepareLayout; 第一次加载layout.刷新layout.以及- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds;这个方法返回yes时,会调用.这是苹果官方的说明The collection view calls -prepareLayout once at its first layout as the first mess

[iOS UI进阶 - 2.2] 彩票Demo v1.2 UICollectionView基本

A.需要掌握的 设计.实现设置界面 cell的封装 UICollectionView的使用 自定义UICollectionView 抽取控制器父类 “帮助”功能 code source: https://github.com/hellovoidworld/HelloLottery B.实现 1.探讨“设置”界面的实现方案 (1)“设置”界面可以采用的做法 static cell(呆板,完全没有动态) 使用代码,条件判断逐个编写(麻烦,代码冗长) 使用模型.plist加载(能够动态配置跳转控制器,

流水布局与block深入研究

9.  自定义流水布局 9.0UICollectionView与UItableView的区别:在布局(UItableView继承UISorllView),UICollectionView不用设置contentSize           9.0UICollectionView与UItableView的相同点:循环利用              9.1.0UICollectionView注意点:1.初始化必须要传入布局,(流水布局:九宫格布局)2.UICollectionViewCell必须注册3

主要责任、 主要技术

主要责任.主要技术责任描述:    协助项目经理对产品进行构架,    软件界面架构及实现,多控制器嵌套处理    利用UI设计组提供的UI图片,使用AutoLayout布局设置对APP界面进行布局    增加多平台支付功能    负责界面搭建,数据显示    利用第三方框架百度地图开放API进行定位和周边团购数据查找    定位功能.便捷支付模块代码的编写和封装    加入支付宝.网银支付功能    本地数据缓存优化    及时消息及文件传递    OpenFire + MySQL服务器搭建 

列表控件UICollectionView-- Swift

1.UICollectionView的常用属性 // 1.设置位置和大小 init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) // 2.设置子视图的布局方式 var collectionViewLayout: UICollectionViewLayout // 3.设置UICollectionView的代理对象 unowned(unsafe) var delegate: UICollectionView

自定义UICollectionLayout布局 —— UIKit之学习UICollectionView记录一《瀑布流》

一.思路 思路一:比较每一行所有列的cell的高度,从上到下(也就是从第一行开始),从最短的开始计算,(记录下b的高度和索引,从开始计算,依次类推) 思路二:设置上.下.左.右间距和行间距.列间距及列数. 思路三:实现的重要的方法. 二.代码先行. 1.自定义layout类. //入口 #import <UIKit/UIKit.h> @protocol STRWaterLayoutDelegate; @interface STRWaterLayout : UICollectionViewLay