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

問題は、セルが再利用されていることです。したがって、テキストビューが追加されたセルを下にスクロールすると、別の行で再利用されます。

これを解決する最善の方法は、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

あなたの場合、セルが再利用されるため、このコードを試してください

static 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 に答える