所以我有一个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)。这是为什么?我做错了什么?
答案 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"];