如何以不同的方法访问 uicollectionviewcell 对象?
Posted
技术标签:
【中文标题】如何以不同的方法访问 uicollectionviewcell 对象?【英文标题】:How to access uicollectionviewcell objects in different methods? 【发布时间】:2015-07-10 12:31:54 【问题描述】:我有一个集合视图,并且我对集合视图单元进行了子类化,所以我有重复的内容。
在我的集合视图类中,我使用此方法访问和设置单元格中的对象,例如设置附加到单元格的标签?
- (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
?
*注意,我想更新我的所有单元格,而不仅仅是一个单元格。
【问题讨论】:
您想何时更新 textLabel? @hoya21 多次,一旦应用程序收到推送通知,我想要一种方法来触发 textLabel 的更新,但是我不想这样做[collectionView reloadData];
因为我有一个转换应用于我的单元格,这将重置单元格大小(看起来很糟糕),这就是我只想访问 textLabel 的原因。
要重新加载 UICollectionview 的单个单元格,您可以参考此链接***.com/a/20318136/3792386
【参考方案1】:
您只能使用visibleCells
方法访问“可见”UICollectionViewCell
。
对于那些“不可见”的单元格,您必须在collectionView:cellForItemAtIndexPath
中进行配置。
【讨论】:
【参考方案2】:所以我建议你保留一个数组,其中包含要更改的单元格的 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];
出于我的目的,我更改了指定单元格的图像、文本颜色和单元格背景。如果你有一个标签,你可以对你想要的单元格的文本做同样的事情。
【讨论】:
谢谢,但这不是我需要的。我希望能够更新我的所有单元格,我真正需要的是一种访问我的子类textLabel
变量的方法,这样我就可以完全按照我在提供的代码中所做的事情。我需要一种方法来回忆这段代码。【参考方案3】:
您的CollectionViewCell
只是视图,您应该从模型中提供信息并相应更新,就像您在- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
中所做的那样
我当时的建议是先更新您的模型,然后再更新您的单元格:
dm[@"nameArray"] = updated_info //Updated names
[DataManager sharedInstance] = ...//Update DataManager
collectionView.reloadData //Update all your cells
我还要小心在 cellForItemAtIndexPath: 方法中调用DataManager *dm = [DataManager sharedInstance];
。也许最好为此使用依赖注入。你可以看到更多关于here
【讨论】:
以上是关于如何以不同的方法访问 uicollectionviewcell 对象?的主要内容,如果未能解决你的问题,请参考以下文章
使用 UICollectionView 收到内存警告以查看图像