出列后,自定义UICollectionViewCell属性为null

时间:2015-12-23 17:49:46

标签: ios objective-c uicollectionview uicollectionviewcell

所以我有一个UICollectionView和一个自定义单元格,它都显示出来并且效果很好。我在viewDidLoad中注册了这个类:

myCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewFrame collectionViewLayout:layout];
[myCollectionView setDataSource:self];
[myCollectionView setDelegate:self];
[myCollectionView setBackgroundColor:[UIColor myColor]];
[myCollectionView registerClass:[SBCustomCell class] forCellWithReuseIdentifier:@"Cell"];

在我的cellForItemAtIndexPath方法中,我将单元格出列并设置其属性并将其返回:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"Cell";

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

[cell setName: "My Name"];
cell.image = [UIImage imageNamed:@"lol.png"];
cell.score = 100.0;
cell.backgroundColor=[UIColor whiteColor];

return cell;
}

这一切都很好,它会在UI中显示出来。我的问题是当我在collectionView上设置手势识别器时,当我长按某个单元格时,我希望能够访问其属性。我试图这样做:

-(void)handleLongPress:(UILongPressGestureRecognizer *)longPressRecognizer {

CGPoint locationPoint = [longPressRecognizer locationInView:myCollectionView];

if (longPressRecognizer.state == UIGestureRecognizerStateBegan) {

    NSIndexPath *indexPathOfMovingCell = [myCollectionView indexPathForItemAtPoint:locationPoint];

    SBCustomCell *cell= [myCollectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPathOfMovingCell];

    NSLog(@"%@",cell.name);

当我尝试访问我的任何自定义单元格属性时,它在控制台中为(null)。这是为什么?我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要使用:

SBCustomCell* cell = (SBCustomCell*)[myCollectionView cellForItemAtIndexPath:indexPathOfMovingCell];

而不是:

SBCustomCell* cell = [myCollectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPathOfMovingCell];

此外,您使用SBSingleCandidateUnitView作为单元格类型而不是SBCustomCell

答案 1 :(得分:0)

因为我没有正确设置我的属性。在我的头文件中,我需要设置一个属性,也就是@property ... UIImageView myImageView;

在我的CustomCell.m文件中,我应该不会覆盖那些setter和getter。而只是分配和启动它们并将它们添加到视图中。

回到我的ViewController.m中我应该添加这样的属性:

customcell.myImageView.image = [UIImage imageNamed:@" cartman.png"];