0

UILabelをセルに実装しようとしましたが、テーブルを上下に数回スクロールすると、いくつかの値が重複して表示されます。私はARCを使用しているので、必要なときにリリースがないので、質問は次のとおりです。tableViewセルにラベルを実装する正しい方法は何ですか。

これがどのように見えるかです

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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


    }
     // Configure the cell...  

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1];
    cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 


    UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)];
    cellLabelS1.backgroundColor = [UIColor clearColor];
    cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
    [cellLabelS1 setTextColor:[UIColor whiteColor]];


    [cellLabelS1 setText:temperatureString];
    temperatureString = nil;
    [cell addSubview:cellLabelS1];
    [[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]];
    [[cell textLabel]setText:cityString];

    return cell;

}

4

3 に答える 3

2

ラベルがない場合にのみ、セルにラベルを追加する必要があります.2回目のパスでセルを再利用する場合は、ラベルを再度追加します。したがって、私のアドバイスは、ラベルにタグを設定し、セルcontentViewベースがすでにラベルになっているかどうかを確認することです。そうでない場合は、作成して追加します。

            UILabel *myLabel = (UILabel *)[cell.contentView viewWithTag:2002];
            if(!myLabel){
                myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 22)];
                myLabel.tag = 2002;
                [cell.contentView addSubview:myLabel];
            }
             myLabel.text = @"my new text";
于 2012-06-26T14:32:09.043 に答える
1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

        UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0,cell.frame.size.width, cell.frame.size.height)];
cellLabelS1.backgroundColor = [UIColor clearColor];
cellLabelS1.tag = 200; 
cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
[cellLabelS1 setTextColor:[UIColor whiteColor]];
[cell addSubview:cellLabelS1];
}
 // Configure the cell...  

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1];
cell.textLabel.highlightedTextColor = [UIColor colorWithRed:0.753 green:0.651 blue:0.1569 alpha:1]; 

UILabel *cellLabelS1 = (UILabel*)[cell viewWithTag:200];
[cellLabelS1 setText:temperatureString];
temperatureString = nil;

[[cell imageView]setImage:[UIImage imageNamed:imageFromCodeDay1]];
[[cell textLabel]setText:cityString];

return cell;
}

これがあなたを助けるかもしれません...

于 2012-06-26T14:40:57.297 に答える
0

あなたの問題はこれらの行にあります:

UILabel *cellLabelS1 = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, cell.frame.size.width, cell.frame.size.height)];
cellLabelS1.backgroundColor = [UIColor clearColor];
cellLabelS1.font = [UIFont boldSystemFontOfSize:16];
[cellLabelS1 setTextColor:[UIColor whiteColor]];

テーブルビューから再利用されたセルを取得すると、すでにこのラベルが含まれています。重複するラベルを追加しないようにするためにできることは、新しいセルを割り当てる必要がある場合にのみラベルを追加することです。ただし、これにより、再利用されたセルからラベルを取得するのが非常に複雑になる可能性があります。

個人的には、Interface BuilderでカスタムUITableViewCellを作成し、UILabelプロパティを持つカスタムUITableViewCellサブクラスを作成することをお勧めします。

于 2012-06-26T14:32:39.400 に答える