iOS UICollectionView XIB

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

首先认识一下UICollectionView

[objc] view
plain
 copy

  1. NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionView : UIScrollView

UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类。

使用UICollectionView 必须实现UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议。

下面给出一些常用方法,具体的使用可以参考Demo:点我下载 
苹果官方Demo:点我下载

[objc] view
plain
 copy

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. self.title = @"UICollectionView学习";
  5. //通过Nib生成cell,然后注册 Nib的view需要继承 UICollectionViewCell
  6. [self.collectionView registerNib:[UINib nibWithNibName:@"SQCollectionCell" bundle:nil] forCellWithReuseIdentifier:kcellIdentifier];
  7. //注册headerView Nib的view需要继承UICollectionReusableView
  8. [self.collectionView registerNib:[UINib nibWithNibName:@"SQSupplementaryView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kheaderIdentifier];
  9. //注册footerView Nib的view需要继承UICollectionReusableView
  10. [self.collectionView registerNib:[UINib nibWithNibName:@"SQSupplementaryView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:kfooterIdentifier];
  11. //
  12. self.collectionView.allowsMultipleSelection = YES;//默认为NO,是否可以多选
  13. }
  14. - (void)didReceiveMemoryWarning
  15. {
  16. [super didReceiveMemoryWarning];
  17. // Dispose of any resources that can be recreated.
  18. }
  19. #pragma mark -CollectionView datasource
  20. //section
  21. - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
  22. {
  23. return 2;
  24. }
  25. //item个数
  26. - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
  27. {
  28. return 6;
  29. }
  30. // The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
  31. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
  32. {
  33. //重用cell
  34. UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kcellIdentifier forIndexPath:indexPath];
  35. //赋值
  36. UIImageView *imageView = (UIImageView *)[cell viewWithTag:1];
  37. UILabel *label = (UILabel *)[cell viewWithTag:2];
  38. NSString *imageName = [NSString stringWithFormat:@"%ld.JPG",(long)indexPath.row];
  39. imageView.image = [UIImage imageNamed:imageName];
  40. label.text = imageName;
  41. cell.backgroundColor = [UIColor redColor];
  42. return cell;
  43. }
  44. // The view that is returned must be retrieved from a call to -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:
  45. - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
  46. NSString *reuseIdentifier;
  47. if ([kind isEqualToString: UICollectionElementKindSectionFooter ]){
  48. reuseIdentifier = kfooterIdentifier;
  49. }else{
  50. reuseIdentifier = kheaderIdentifier;
  51. }
  52. UICollectionReusableView *view =  [collectionView dequeueReusableSupplementaryViewOfKind :kind   withReuseIdentifier:reuseIdentifier   forIndexPath:indexPath];
  53. UILabel *label = (UILabel *)[view viewWithTag:1];
  54. if ([kind isEqualToString:UICollectionElementKindSectionHeader]){
  55. label.text = [NSString stringWithFormat:@"这是header:%d",indexPath.section];
  56. }
  57. else if ([kind isEqualToString:UICollectionElementKindSectionFooter]){
  58. view.backgroundColor = [UIColor lightGrayColor];
  59. label.text = [NSString stringWithFormat:@"这是footer:%d",indexPath.section];
  60. }
  61. return view;
  62. }
  63. //定义每个UICollectionViewCell 的大小
  64. - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
  65. {
  66. return CGSizeMake(60, 80);
  67. }
  68. //定义每个Section 的 margin
  69. -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
  70. {
  71. return UIEdgeInsetsMake(15, 15, 5, 15);//分别为上、左、下、右
  72. }
  73. //返回头headerView的大小
  74. -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
  75. CGSize size={320,45};
  76. return size;
  77. }
  78. //返回头footerView的大小
  79. - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
  80. {
  81. CGSize size={320,45};
  82. return size;
  83. }
  84. //每个section中不同的行之间的行间距
  85. - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
  86. {
  87. return 10;
  88. }
  89. //每个item之间的间距
  90. //- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
  91. //{
  92. //    return 100;
  93. //}
  94. //选择了某个cell
  95. - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
  96. {
  97. UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
  98. [cell setBackgroundColor:[UIColor greenColor]];
  99. }
  100. //取消选择了某个cell
  101. - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
  102. {
  103. UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
  104. [cell setBackgroundColor:[UIColor redColor]];
  105. }

效果图如下:

时间: 2024-10-03 22:56:15

iOS UICollectionView XIB的相关文章

iOS中xib与storyboard原理,与Android界面布局的异同

用文本标记语言来进行布局,用的最多的应该是HTML语言.HTML可以理解为有一组特殊标记的XML语言. 一.iOS中xib与storyboard显示原理 在iOS中主要的布置界面的方式有3种:代码,xib,storyboard. 1. 代码 代码布置界面是万能的,但通常很复杂.布置一个简单的界面可能需要很多行代码,因此十分繁琐. 下面为创建一个按钮的代码,最少也要3行: UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd

【iOS】Xib的使用与File'Owner总结

一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描述界面的. storyboard描述的是比较大型的,大范围.适合描述界面跳转等. 二.XIB的使用 Xib是小范围的的,是轻量级的.比较适合描述小块的界面. 创建xib:新建界面里面user interface -->empty. 加载xib:[NSBundle mainBudle]loadNibNamed:XXX-.]来加载xib 三.关于loadNibNameed方法 [[NSBundle mainBundle] l

iOS UICollectionView与UITableView

共同点:都需要接受两个协议 并执行代理方法 不同点:初始化方法不同  UITableVIew可以用alloc 方法初始化 而UICollectionView必须用下面方法初始化 // 初始化瀑布流 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize:CGSizeMake(150,120)]; //设置每个cell显示数据的宽和高必须

[iOS] 使用xib做为应用程序入口 with Code

[iOS] 使用xib做为应用程序入口 with Code 前言 开发iOS APP的时候,使用storyboard能够快速并且直觉的建立用户界面.但在多人团队开发的情景中,因为storyboard是以单一档案的方式存在,很容易造成签出.签入时,档案被锁定.档案合并冲突等等问题的发生.这时开发人员可以选择使用xib做为用户接口的开发单位,将用户接口拆散为独立存在的xib档案,分散团队成员同时编辑同一文件的风险. 在Xcode中默认是以storyboard做为应用程序入口,变更为使用xib做为应用

[iOS] 使用xib作为应用程序入口 with IDE

[iOS] 使用xib作为应用程序入口 with IDE 在「使用xib做为应用程序入口 with Code」这篇文章中,介绍了如何透过写Code的方式,来使用xib做为应用程序的入口.但其实在Xcode中,透过IDE所提供的工具,也可以达到相同的功能.本篇文章说明在iOS APP开发的过程中,如何透过IDE的操作,来使用xib做为应用程序的入口,为自己留个纪录也希望能帮助到有需要的开发人员.(透过IDE操作的方式,会比使用Code的方式复杂许多.但是在操作的过程中,可以理解xib档案的操作与概

【iOS】Xib的使用与File'Owner总结

一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范围的的,是轻量级的.比較适合描写叙述小块的界面. 创建xib:新建界面里面user interface -->empty. 载入xib:[NSBundle mainBudle]loadNibNamed:XXX-.]来载入xib 三.关于loadNibNameed方法 [[NSBundle mainB

iOS UICollectionView的使用(用storyboard和xib创建)

1. 在storyboard中,拖出1个UICollectionViewController 2. 新建file--Cocoa Touch Class,继承自UICollectionViewController,假设名字是CollectionDemo 3. 在storyboard, 把刚才拖出来的UICollectionViewController的class改成CollectionDemo 4. 在 CollectionDemo.m 中实现,数据源方法 - (NSInteger)collect

[iOS]通过xib定义Cell然后关联UICollectionView

先新建一个View的xib,然后删掉自动生成的View,拖进一个UICollectionCell,再新建一个对应的UIView继承UICollectionCell类. OK,接下来该连outlet的就连. 设置delegate和dataSource 然后通常我们都要这样, func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollect

iOS UICollectionView 纯代码,无xib

// 1)  必须使用下面的方法进行Cell类的注册: //    - (void)registerClass:forCellWithReuseIdentifier: //    - (void)registerClass:forSupplementaryViewOfKind:withReuseIdentifier: //    - (void)registerNib:forCellWithReuseIdentifier: //    - (void)registerNib:forSupplem