当有人在
内的集合视图(约15个单元格)中选择一个单元格时- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
方法我试图通过使用
更改我在一个标题中放置的标签UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header" forIndexPath:indexPath];
UILabel *headerTitle=(UILabel *)[headerView viewWithTag:1];
headerTitle.text=@"test";
标记和所有内容都已正确设置,但不会更改。关于我哪里出错的任何想法?
答案 0 :(得分:2)
您已经有一个标题视图,因此出列一个会创建另一个不是您要更改的那个。无法访问集合视图中的标题视图 - 没有headerForSection:方法,因此您必须通过数据源更改标签。所以,如果你只有一个标题,那么你应该有一个字符串属性,让我们称之为headerTitle,用于填充标题中的标签。那么,你的collectionView:viewForSupplementaryElementOfKind:atIndexPath:的实现应该是这样的:
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
RDReusableHeader *headerView;
if (kind == UICollectionElementKindSectionHeader){
headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MyView" forIndexPath:indexPath];
headerView.label.text = self.headerTitle;
}
return headerView;
}
然后在didSelectItemAtIndexPath:中,为该属性分配一个新值,并在集合视图上调用reloadData。
self.headerTitle = @"This is the New Tilte";
[self.collectionView reloadData];