1

我有一个UICollectionView其所有单元格都包含一个UITableView. 我的UICollectionView委托/数据源方法由视图控制器(假设TTCollectionViewController)处理,并由( )tableViews直接处理。collection view cellsTTCollectionViewCell

为了更改一些标签颜色,我需要跟踪我的 tableViews 上的每个选定行,所以我做了类似的事情:

//
// TTCollectionViewCell.m
//
[...]
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // keep track of selected drugs
    if (![self.selectedDrugIndexPaths containsObject:indexPath])
    {
        [self.selectedDrugIndexPaths addObject:indexPath];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        TTTableViewCell *contentCell = [tableView dequeueReusableCellWithIdentifier:@"test"];
        if (contentCell == nil)
            contentCell = [[TTTableViewCell alloc] init];

        [...]

        // test
        if ([self.selectedDrugIndexPaths containsObject:indexPath]) {
            contentCell.drugLabel.textColor = [UIColor grayColor];
        } else {
            contentCell.drugLabel.textColor = [UIColor blackColor];
        }
}
[...]

但事情是这样的:使用 dequeue 可重用的东西,我collectionView搞砸了我的所有曲目(例如,在滚动时,表 1 上的选定行在表 3 上被选中)。

我知道不使用是个坏主意dequeuereusable(我什至不知道是否可以不使用它),但是我可以做类似的事情吗?

有没有人已经实施过这种案例?

提前谢谢。

编辑 :

cellForRow...是您要求的我的collectionView的方法:

///
/// TTCollectionController.m
///
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    TTCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

    cell.data = [self.data objectAtIndex:indexPath.row];

    return cell;
}
4

0 回答 0