0

UITableViewCellInterface Builder で を作成し、そのサブクラスを作成しました。その中にラッフルの結果をラベルで表示する必要があります。取得する結果の数がわからないため、IB でラベルを作成できないため、内部で作成していcellForRowAtIndexPathます。セルが再利用されたときにサブビューの上にサブビューを作成し続けているので、今何が起こっているのでしょうか。

Cell サブクラスの Interface Builder \ でラベルを作成することを考えましたawakeFromNibが、タグを使用してラベルを埋めましたが、ラベルがいくつになるかわかりません。

それを解決する良い方法は何ですか?

画面領域の外に出たら、セルのコンテンツを削除する方法はありますか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //Where we configure the cell in each row
    id currentRaffle = [_winnings objectAtIndex:indexPath.row];
    RaffleResultCell *cell = [tableView dequeueReusableCellWithIdentifier:@"raffleResCell"];
    if (cell == nil) {
        cell = [[RaffleResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"raffleResCell"];
    }
    cell.prizeTitle.text = [currentRaffle valueForKey:@"title"];
    NSArray *winningNumbers = [[currentRaffle valueForKey:@"winningNumbers"] componentsSeparatedByString:@","];
    cell.numbOfRowsPerCell = 1+ [winningNumbers count]/4;
    int row =0;
    int col=0;
    for (int i=0;i<[winningNumbers count];i++)
    {
        UILabel *temp =[[UILabel alloc]initWithFrame:CGRectMake(70*row, 30*col, 70, 20)];
        temp.textAlignment = UITextAlignmentCenter;
        temp.font=[temp.font fontWithSize:14];
        temp.text = [NSString stringWithFormat:@"%@  ",[winningNumbers objectAtIndex:i]];
        [cell.winningNumbersView addSubview:temp];
        if(row<3)
        [cell.winningNumbersView addSubview:line];
        row++;
        if(row >3)
        {
            row=0;
            col++;
        }
    }

    return cell;
}
4

3 に答える 3

1

UILabels再利用に関係なく、毎回追加しています。UILabelsセルの作成時にのみ追加する必要があります。

ただし、ラベルの数が毎回異なる場合は、もう少し洗練されたソリューションが必要です。

おそらく、動的に作成されたすべての を保持する単一のUIViewコンテナを に追加し、毎回すべてを削除します。IBUILabelsUILabels

例えば

for (UILabel *label in cell.labelContainer.subviews) {
    [label removeFromSuperview];
}
于 2013-07-24T10:06:49.287 に答える
1

この種のアプローチには、セルがロードされるたびに、呼び出されるたびにラベルがセルの上下に何度も追加されるという問題があります。cellForrowAtIndexpath:その作成と追加を回避するには、if(セルで行うUILabel 必要があります==nil) セクション

于 2013-07-24T10:18:19.493 に答える