将标签正确分配给uitableview的单元格和子视图

时间:2012-11-07 21:24:15

标签: ios xcode uitableview cell

嘿伙计们我已经连续两天坚持这个问题,所以我问是否有人可以帮助我。

我的桌面视图由4个部分组成。

第1节 - >由1行组成,其中单元格包含子视图,这是一个uiimageview

第2节 - >由2个普通行组成(只有2个简单的单元格,其中包含文字)

第3节 - >由1个正常行组成

第4节 - >由1行组成,其中单元格包含子视图,该子视图是可以包含动态文本的uitextview,因此uitextview的高度以及因此单元格高度会根据uitextview中的文本数量而变化。

以下是创建此结构的代码:

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


//create a nsstring object that we can use as the reuse identifier
static NSString *CellIdentifier = @"Cell";

//check to see if we can reuse a cell from a row that has just rolled off the screen
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//if there re no cells that can be reused, create a new cell
if(cell==nil){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


    switch (indexPath.section) {
        case 0:
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            [cell.contentView addSubview:_viewForImageHeader];

            break;

        case 1:
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

            cell.textLabel.numberOfLines = 0;
            cell.textLabel.lineBreakMode = 0;
            cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];

            break;

        case 2:
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];
            break;

        default:
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            [cell.contentView addSubview:_textViewForArticle];

            break;

    }

}
else{

    NSLog(@"in else");

}


//here i fill in the 2 normal cells with text


return cell;

}

当uitableview加载时(在纵向模式下)一切都很完美(图像在第1部分,第2和第3部分包含正确的文本,第4部分包含我的动态文本)。但是当我开始旋转应用程序时,所有单元格都会混淆。例如,我在第4节中找到section3的内容,反之亦然。

我认为这与我不能正确重用细胞的事实有关。我应该使用标签,如果是这样,我如何在特定情况下实现标签的使用?

2 个答案:

答案 0 :(得分:0)

switch个案置于if条件之后 - if and else

之后

答案 1 :(得分:0)

是的,这是因为重用细胞。这里有几个选项,但是如果你在这个tableView中永远不会有超过5个单元格,那么到目前为止最简单和最优化的解决方案是不重用单元格。换句话说,不是每次都调用" dequeueReusableCellWithIdentifier"而是只分配一个新的单元格。

当你有更多的单元格时,这会降低性能,但是如果你的单元格是静态的并且有限(就像它们看起来那样),那么尝试重用单元格并没有真正的好处。

如果你有4个"类型"对于单元格和更多行(更多动态分配的单元格),解决方案是为4"类型"中的每一个子类化UITableViewCell。然后根据部分或任何条件调用正确的单元格。