2

これは、私が何かを見落としていない限り、以前は機能していました。テーブルが最初に表示されたときはすべてがうまく見えますが、上下にスクロールするとラベルの内容が重複します。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)];

        labelName.tag = 20;

        [cell addSubview:labelName];
    }

    ((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row];

    return cell;
}
4

2 に答える 2

5

それを誘発するセリフを発見!

((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row];

-viewWithTag:に送信することでラベルを取得してtableViewいますが、セルに問い合わせる必要があります。

補足として、サブビューをセルのcontentView

これが正しい実装です。

-(UITableViewCell *)tableView:(UITableView *)tableView 
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                      reuseIdentifier:CellIdentifier];

        UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)];

        labelName.tag = 20;

        [cell.contentView addSubview:labelName];
    }

    ((UILabel *)[cell.contentView viewWithTag:20]).text = [data objectAtIndex:indexPath.row];

    return cell;
}
于 2013-08-22T12:31:25.140 に答える
1

if (cell == nil)条件内に次の行を記述します

labelName.text = [data objectAtIndex:indexPath.row];

この次の行をコメントまたは削除します..

((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row];
于 2013-08-22T11:45:38.390 に答える