0

我有个问题。我实现了一个表格视图。在didSelectRowAtIndexPath方法中,我增加了单元格的高度并向该单元格的contentView. 但是,如果我向下滚动表格视图(例如 10 个单元格),我将再次看到相同的文本视图。你能帮我么?

这里有一些代码可以更好地理解问题:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if(selectedIndex == indexPath.row) 
    {
        return CELL_HEIGHT * 5;
    }
    return CELL_HEIGHT;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE];
    UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath];
    if (selectedIndex == indexPath.row) 
    {
        selectedIndex = -1;
        [[cell.contentView viewWithTag:COOL_TAG] removeFromSuperview];
    }
    else
    {
        UITableViewCell *previousCell = [aTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:selectedIndex inSection:0]];

        if ([previousCell.contentView viewWithTag:COOL_TAG]) 
        {
            [[previousCell.contentView viewWithTag:COOL_TAG] removeFromSuperview];
        }
        selectedIndex = indexPath.row;
        UITextView *text = [[UITextView alloc] initWithFrame:CGRectMake(10, 45, 255, 180)];
        [text.layer setBackgroundColor:[[UIColor whiteColor] CGColor]];
        [text.layer setBorderColor:[[UIColor grayColor] CGColor]];
        [text.layer setBorderWidth:1.0f];
        [text.layer setCornerRadius: 8.0f];
        [text.layer setMasksToBounds:YES];
        [text setEditable:NO];
        text.text = [questionArray objectAtIndex:indexPath.row];
        text.tag = COOL_TAG;
        [cell.contentView addSubview:text];
    }

    [tableView beginUpdates];
    [tableView endUpdates];
}

提前致谢!

4

3 回答 3

2

问题是细胞正在被重复使用。因此,当您向下滚动添加 textview 的单元格时,将在另一行中重用。

我认为解决此问题的最佳方法是将 textview 添加到 cellForRowAtIndexPath 方法中的单元格。

然后,您需要创建一个数组,在其中定义该行是否应显示 textview。然后在 didselect 方法中,更改数组值并更新表。

请注意,检查应该在 cellForRowAtIndexPath 中的 if(cell == nil) 检查之外进行,否则不会为重用的单元格调用它。

于 2012-12-05T09:39:40.410 回答
0

在 viewdidload 中创建 textview 并将其添加到 CellForRow 方法中的 tableview 单元格中。这可能会解决您的问题

于 2012-12-05T09:04:14.593 回答
0

尝试此代码,因为在您的情况下,单元格被重新使用

静态 NSString *CellIdentifier = @"YourCell";

YourCell *cell = (YourCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"YourCell" owner:self options:nil];

    for (id currentObject in topLevelObjects){
        if ([currentObject isKindOfClass:[UITableViewCell class]]){
            cell =  (YourCell *) currentObject;
            break;
        }
    }
}
于 2012-12-05T11:10:47.550 回答