0

我有一个UITableView有 2 个不同的自定义UITableViewCell和 2 个不同的唯一标识符。

我加载第一个自定义UITableViewCellLoad然后加载第二个自定义UITableViewCellCell Select

我知道我的问题与我重复使用 Cells 的方式有关。但我试过使用

routineSearchSelectedResultCell * cell = (routineSearchSelectedResultCell*)[tableView dequeueReusableCellWithIdentifier:nil];结果是新UITableViewCell的为空并且属性没有被填充。

我也尝试过[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];,但给了我相同的结果。

我怎么能解决这个问题?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (idp && idp.row == indexPath.row  ) {
        return [self tableViewRoutineSelectedResult:tableView cellForRowAtIndexPath:indexPath];
    }

    NSString *cellIdentifier = @"routineSearchCell";
    routineSearchCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell) {
        cell = [[routineSearchCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }


    cell.routineName.text = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineName"];
    cell.routineAuthor.text = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"username"];

    return cell;

}
- (routineSearchSelectedResultCell *)tableViewRoutineSelectedResult:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary* myRoutine = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"];

    [self sortOutRoutineImages:myRoutine[@"routineType"]];

    NSString *cellIdentifier = @"routineSearchSelectedResultCell";
    routineSearchSelectedResultCell * cell = (routineSearchSelectedResultCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell = [[routineSearchSelectedResultCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    cell.label1.text =@"test";
    cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BlackGradientSearch"]];
    cell = [self iconRoutineImagesController:cell];
    cell.imgInstruction.image = [UIImage imageNamed:@"InstructionSearchWhite"];
    cell.imgVideos.image = [UIImage imageNamed:@"VideoSearchWhite"];
    cell.routineName.text = myRoutine[@"routineName"];
    [cell.download setBackgroundImage:[UIImage imageNamed:@"DownloadSearchWhite"] forState:UIControlStateNormal];
    return cell;
}
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ( idp ) {
        NSIndexPath* pIdp = [[NSIndexPath alloc] init];
        pIdp = idp;
        idp = indexPath;
        [tableView beginUpdates];
        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        [tableView reloadRowsAtIndexPaths:@[pIdp] withRowAnimation:UITableViewRowAnimationRight];
        [tableView endUpdates];
    } else {
        idp = [[NSIndexPath alloc]init];
        idp = indexPath;
        [tableView beginUpdates];
        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        [tableView endUpdates];
    }



}

4

2 回答 2

0

我认为您正在使用标签并且它们是重叠的..尝试使用它,它可能会对您有所帮助..

for(UIView *view in cell.subviews){ 
   if([view isKindOfClass:[UILabel class]]){
     [view removeFromSuperview];
   } 
}
于 2013-07-24T06:53:12.883 回答
0

尝试覆盖

-(void)prepareForReuse

如果 UITableViewCell 对象是可重用的——也就是说,它有一个重用标识符——这个方法在从 UITableView 方法 dequeueReusableCellWithIdentifier: 返回对象之前调用。出于性能原因,您应该只重置与内容无关的单元格属性,例如 alpha、编辑和选择状态。重用单元格时,tableView:cellForRowAtIndexPath: 中的表视图委托应始终重置所有内容。如果单元对象没有关联的重用标识符,则不调用此方法。如果重写此方法,则必须确保调用超类实现。

文件

于 2013-07-24T02:17:04.787 回答