更改UILabel内部标题以获取集合视图

时间:2013-08-14 17:43:21

标签: iphone ios objective-c ios5

当有人在

内的集合视图(约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";

标记和所有内容都已正确设置,但不会更改。关于我哪里出错的任何想法?

1 个答案:

答案 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];