将子视图添加到UITableViewCell

时间:2011-08-24 09:49:59

标签: iphone ios uitableview

我在向UITableViewCell添加子视图时遇到了麻烦。 当桌面尺寸低于iPhone尺寸时,它正在工作。

但是当尺寸越来越大时,我在滚动时会产生一些可怕的效果:

enter image description here

应该是这样的:

enter image description here 然后我认为它来自细胞再利用。 以下是我的代码示例:

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

    static NSString *kCellIdentifier = @"UITableViewCellStyleSubtitle";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
    if (cell == nil) {
        //construct the cell
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                       reuseIdentifier:kCellIdentifier] autorelease]; 


        //clear the previuous content
        NSLog(@"Il y a %d subviews", [[[cell contentView] subviews] count]);
        //[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
        NSLog(@"Il y a %d subviews", [[[cell contentView] subviews] count]);
        [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
        [cell setSelectionStyle:UITableViewCellEditingStyleNone];
    }    

    switch (indexPath.row) {
        case 0:
            [cell addSubview:titleEvent];
            break;
        case 1:
            //load the owner logo
            [cell addSubview:logoAsso];
            break;
        case 2:
            //StartDate
            [cell addSubview:clockImage];
            break;
        case 3:
            //EndDate
            [cell addSubview:clockEndImage]; 
            break;
        case 4:
            //Address
            [cell addSubview:adress];
            break;
        case 5:
            //map
            [cell addSubview:map];
            break;
        case 6:
            //header
            [Graphism configureSeparationCell:cell];
            break;
        case 7:
            //descritpion
            [cell addSubview:descriptionEvent];
            break;
        default:
            break;
    }
    return cell;
}

子视图是类的属性,并在方法viewDidLoad中配置。 如果你能告诉我我做错了什么,那将是一种解脱。

3 个答案:

答案 0 :(得分:5)

试试此代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"] autorelease];

    } else {
        UIView *subView = (UIView *)[cell.contentView viewWithTag:1];
        if ([subView superview]) {
             [subView removeFromSuperview];
        }
    }

    UIView *subView = [[UIView alloc] init];
    subView.tag = 1;
    [cell.contentView addSubview:subView];
    [subView release];

    return cell;
}

答案 1 :(得分:4)

switch (indexPath.row) {
    case 0:


        if (![cell.contentView viewWithTag:11]) {

            titleEvent.tag = 11;

            [cell.contentView addSubview:titleEvent];
        }


        break;
    case 1:
        if (![cell.contentView viewWithTag:11]) {

            logoAsso.tag = 11;

            [cell.contentView addSubview:logoAsso];
        }
像这样对所有开关案例

答案 2 :(得分:-3)

[cell.contentView addSubview:clockImage];