• UICollectionView的使用


    文件结构:

    一:先定义cell,这里是Cell类,继承自UICollectionViewCell,用xib画出cell

    CollectionCell.h

    1 #import <UIKit/UIKit.h>
    2 
    3 @interface CollectionCell : UICollectionViewCell
    4 
    5 @end

    CollectionCell.c

     1 #import "CollectionCell.h"
     2 
     3 @implementation CollectionCell
     4 
     5 - (id)initWithFrame:(CGRect)frame
     6 {
     7     self = [super initWithFrame:frame];
     8     if (self)
     9     {
    10         // 初始化时加载collectionCell.xib文件
    11         NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CollectionCell" owner:self options:nil];
    12         
    13         // 如果路径不存在,return nil
    14         if (arrayOfViews.count < 1)
    15         {
    16             return nil;
    17         }
    18         // 如果xib中view不属于UICollectionViewCell类,return nil
    19         if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]])
    20         {
    21             return nil;
    22         }
    23         // 加载nib
    24         self = [arrayOfViews objectAtIndex:0];
    25     }
    26     return self;
    27 }

    CollectionCell.xib

    画出cell:

    设置Cell大小:

    设置Identifier:

    设置Class:

    二:UICollectionViewController

    1.CollectionViewController.h

    1 #import <UIKit/UIKit.h>
    2 #import "CollectionCell.h"
    3 
    4 @interface CollectionViewController : UICollectionViewController
    5 
    6 
    7 @end

    2.CollectionViewController.c

     1 #import "CollectionViewController.h"
     2 
     3 @interface CollectionViewController ()
     4 
     5 @end
     6 
     7 @implementation CollectionViewController
     8 
     9 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    10 {
    11     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    12     if (self) {
    13         // Custom initialization
    14     }
    15     return self;
    16 }
    17 
    18 - (void)viewDidLoad
    19 {
    20     [super viewDidLoad];
    21     // Do any additional setup after loading the view from its nib.
    22 
    23     self.collectionView.dataSource = self;
    24     self.collectionView.delegate = self;
    25 }
    26 
    27 - (void)didReceiveMemoryWarning
    28 {
    29     [super didReceiveMemoryWarning];
    30     // Dispose of any resources that can be recreated.
    31 }
    32 
    33 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
    34 {
    35     return 4;
    36 }
    37 
    38 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    39 {
    40     [self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:@"CollectionCell"];
    41     
    42     CollectionCell *cell = (CollectionCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionCell" forIndexPath:indexPath];
    43     
    44     
    45     return cell;
    46 }
    47 
    48 //- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    49 //{
    50 //    CGFloat width = indexPath.row * 50;
    51 //    CGFloat height = indexPath.row * 50;
    52 //    return CGSizeMake(width,height);
    53 //    
    54 //}
    55 
    56 @end

    3.CollectionViewController.xib:

    结构:

    删除原来的view,拖一个collectionView进来

    设置file's owner

    custom class

    cell大小及间隙

    outlet:

    常见错误:

    1.只有collectionView,没有Cell显示出来,那么重写自定义Cell类的 - (id)initWithFrame:(CGRect)frame 方法,从nib加载或者自定义。

    2.Xcode运行时报错:

    UICollectionElementKindCell with identifier CollectionCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

    检查有没有注册identifier:在viewDidLoad方法里加入:

    [self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:@"CollectionCell"];

    3.

    'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "CollectionViewController" nib but the view outlet was not set.

    file's owner中的view属性没有设置,连线view属性和xib中的collectionView

    3.出现错误:'UICollectionView must be initialized with a non-nil layout parameter'

    去xib文件中的collectionView下面的Collection View Flow Layout中的sizeInspector中改变一下Min Spacing或者给在Cell的xib中设置一下Cell的IDentiFier

  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/hereiam/p/3848466.html
Copyright © 2020-2023  润新知