2015-07-10 46 views
0

我有一个集合视图,我subclassed集合视图单元格,所以我有重复的内容。如何访问不同方法中的uicollectionviewcell对象?

在我的集合视图类中,我使用这种方法来访问和设置我的单元格中的对象,例如设置一个贴在单元格上的标签?

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


CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath]; 


//Configure Cell 


//Set Name 
DataManager *dm = [DataManager sharedInstance]; 
NSMutableArray *names = [dm objectForKey:@"nameArray"]; 
NSString *name = [names objectAtIndex:indexPath.row]; 
cell.textLabel.text = [NSString stringWithFormat:@"%@", name]; //set cell here 

    return cell; 
} 

不过,我需要更新cell.textLabel,但我不能在其他方法访问cell.textLabel

我该如何使用除此之外的其他方法访问cell.textLabel

* note,我想更新我的所有细胞,而不仅仅是一个细胞。

+0

你想更新textLabel? – hoya21

+0

@ hoya21多次,只要应用程序收到推送通知我想要一个方法来触发textLabel的更新,但是我不想做'[collectionView reloadData];'因为我有一个变换应用于我的将重置单元格大小(看起来不好)的单元格,这就是为什么我只想访问textLabel。 – Josh

+0

对于重新加载UICollectionView的单元格,您可以参考此链接http://stackoverflow.com/a/20318136/3792386 –

回答

0

您只能使用visibleCells方法访问“可见”UICollectionViewCell

对于那些“不可见”单元,您必须在collectionView:cellForItemAtIndexPath中配置它们。

0

因此,我建议你保持一个数组与indexPaths的单元格,你想改变,然后每次你想改变文本调用一个方法,并改变它们。在这里,它是我用来每次只更改一个单元格的方法。

-(void) makePriorCell:(NSIndexPath *) indexPath{ 

UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; 

//cell.backgroundColor = [UIColor greenColor]; 
UILabel *label = (UILabel *)[cell viewWithTag:101]; 

if (indexPath.item==0) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"2A copy.png"]; 


} 
else if (indexPath.item==1) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"3A copy.png"]; 

} 
else if (indexPath.item==2) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"4A copy.png"]; 

} 
else if (indexPath.item==3) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"5A copy.png"]; 

} 
else if (indexPath.item==4) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"5a_Istoria_Perivallon copy.png"]; 

} 
else if (indexPath.item==5) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"7A copy.png"]; 

} 
else if (indexPath.item==6) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"6A copy.png"]; 

} 
else if (indexPath.item==7) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"8A copy.png"]; 

} 
else if (indexPath.item==8) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"9A copy.png"]; 

} 
else if (indexPath.item==9) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"10A copy.png"]; 

} 
else if (indexPath.item==10) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"11A copy.png"]; 


} 
else if (indexPath.item==11) { 

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
    recipeImageView.image = [UIImage imageNamed:@"12A copy.png"]; 


} 


label.textColor = [UIColor blackColor]; 



cell.backgroundColor=[UIColor whiteColor];} 

为了我的目的,我改变了指定单元格的图像,文本颜色和单元格的背景。如果你有一个标签,你可以使用你想要的单元格的文字。

+0

谢谢,但这不是我所需要的。我希望能够更新我所有的单元格,我真正需要的是访问我的子类'textLabel'变量的方法,这样我就可以完全按照我提供的代码所做的操作。我需要一种方法来回忆这段代码。 – Josh

0

CollectionViewCell只是认为,应该从模型给它的信息,并相应地更新,因为你是内- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

做我会建议什么话,是先更新模型,然后更新您的细胞:

dm[@"nameArray"] = updated_info //Updated names 
[DataManager sharedInstance] = ...//Update DataManager 
collectionView.reloadData //Update all your cells 

而且我会小心调用DataManager *dm = [DataManager sharedInstance];的cellForItemAtIndexPath内:方法。也许这会更好地使用依赖注入。你可以看到更多关于here

相关问题