iOS:如何在这种方法中为我的每个单元格分配一个标签?

Posted

技术标签:

【中文标题】iOS:如何在这种方法中为我的每个单元格分配一个标签?【英文标题】:iOS: how can I assign each of my cells a tag in this method? 【发布时间】:2014-03-05 16:02:42 【问题描述】:

我需要用标签 id 更新每个单元格。我已经完成了这个,但是有一个关键的缺陷。当我更改单元格的顺序时,单元格将继承错误的 id。例如,如果我将单元格 2 替换为单元格 1,则单元格 1 将获得单元格 2 的 ID,而单元格 2 将获得单元格 1 的 ID。每个 ID 都需要用于一个特定的单元格和一个单元格,这样如果我更改了单元格的顺序,它将包含其 ID。我相信问题是我在我的 UICollectionView 委托中调用 id ,因此每次它更新它从服务器调用并再次重用 id 时。我怎样才能解决这个问题?

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

    [self.collectionView registerClass:[Cell class] forCellWithReuseIdentifier:@"Cell"];

    Cell *cell = (Cell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    if (self.data == nil || [self.data count] == 0) 
        self.data = [sections objectAtIndex:indexPath.section];

        cell.cellImg.image = nil;
        [tagArray removeAllObjects];
     else 
        self.data = [sections objectAtIndex:indexPath.section];

        cell.cellImg.image = [self.data objectAtIndex:indexPath.item];
        self.largeImage.image = [self.data objectAtIndex:0];

        NSDictionary *url  = [self.result objectAtIndex:indexPath.row];
        NSString *string = [url valueForKey:@"id"];

        cell.cellImg.tag = string.intValue;
        [tagArray addObject:[NSNumber numberWithInt:cell.cellImg.tag]];
    
    return cell;


-(void)didGetResults:(NSArray *)resultArray

    self.resultArray = resultArray;
    resultModel = [self.resultArray objectAtIndex:0];
    self.resultdata = resultModel.resultdata;

    sections = [[NSMutableArray alloc] initWithCapacity:SECTION_COUNT];
    for(int s = 0; s < SECTION_COUNT; s++) 
        self.data = [[NSMutableArray alloc] initWithCapacity:self.resultdata.count];
        for(int i = 0; i < self.result.count; i++) 
            NSDictionary *url  = [self.result objectAtIndex:i];
            NSString *string = [url valueForKey:@"web_path"];

            UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:string]]]];

            [self.data addObject:myImageView.image];

        
        [sections addObject:self.data];
    
    [tagArray removeAllObjects];

    [self.collectionView reloadData];

【问题讨论】:

【参考方案1】:

您可以先读取单元格 id,然后查看该标签 id 是否与列表中的 id 匹配。如果没有,请为其分配一个 id(假设首先加载该特定单元格或一般的整个表格视图)。如果是,请不要分配新值。我知道如果您的可分配 id 值在表格视图的范围内,这种方法不是特别安全。在这种情况下,请使用散列或大编号的 id,或者是填充整数的串联,例如 id[1] = 1001id[2] = 1002

【讨论】:

以上是关于iOS:如何在这种方法中为我的每个单元格分配一个标签?的主要内容,如果未能解决你的问题,请参考以下文章

在电子表格的相邻单元格中为 Google 表单的每个答案添加时间戳

如何在 Collection 视图中为每个单元格添加 edgeInsets -Swift

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

QTableWidget中如何动态分配单元格

如何在 Xcode 中为我的表格视图添加上边距?

如何在默认样式的 UITableViewCell 中为我还没有的图像保留空间