3

我正在使用UICollectionViewFlowLayout允许对单元格重新排序的自定义子类。源代码在这里

我遇到的问题是,尽管注册并使用了正确的标识符,我为 Collection View 创建的 nib 文件仍未加载。以下是相关的代码片段。

这是在视图控制器.m文件中:

- (void)loadView
{
    self.reorderLayout = [[LXReorderableCollectionViewFlowLayout alloc] init];

    self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero
                                             collectionViewLayout:self.reorderLayout];

    UINib *nib = [UINib nibWithNibName:@"CatagoryViewCell" bundle:nil];
    [self.collectionView registerNib:nib forCellWithReuseIdentifier:@"CatagoryViewCellID"];

    self.collectionView.dataSource = self;
    self.collectionView.delegate = self;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    Catagory *c = [[[CatagoryStore defaultStore] allCatagories]
                   objectAtIndex:[indexPath item]];

    CatagoryViewCell *cell = (CatagoryViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"CatagoryViewCellID" forIndexPath:indexPath];

    [cell setController:self];

    [[cell nameLabel] setText:c.title];
    return cell;
}

这是我唯一引用笔尖的两个地方。

这是细胞笔尖: 在此处输入图像描述

这是它在模拟器和设备中的样子:

在此处输入图像描述

我尝试使用类似的代码和原始UICollectionViewFlowLayout类,它工作正常。非常感谢任何见解!

4

1 回答 1

6

尝试在 CollectionViewCell.m 中使用此“initWithFrame”方法

-(id)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];

if (self) {
    NSString *cellNibName = @"YourCollectionViewCell";
    NSArray *resultantNibs = [[NSBundle mainBundle] loadNibNamed:misVentasCellNibName owner:nil options:nil];

    if ([resultantNibs count] < 1) {
        return nil;
    }

    if (![[resultantNibs objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) {
        return nil;
    }
    self = [resultantNibs objectAtIndex:0];
}

return self;    
}

然后在你有de collection view的类中添加:

[collectionView registerClass:[YourCollectionViewCell class] forCellWithReuseIdentifier:@"YourCollectionViewCell"];

最后

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

// Setup cell identifier
static NSString *cellIdentifier = @"YourCollectionViewCell";

YourCollectionViewCell *cell = (YourCollectionViewCell *)[cvArticles dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
}

请记住,您必须在您的.xib 中插入您在 Collection 视图的 Identifier 字段中使用的相同 cellIdentifier!!!!!!!!!!

于 2014-05-08T16:11:46.943 回答