3

私はiPhone開発に不慣れで、1つのアプリを開発しています。そのアプリでは、それぞれの価格をUITableView. この問題を解決するためにUITableViewCell、アイテムとその価格を表示するためにラベルを動的に作成するなどのいくつかの概念に従っています。

アプリでは、最初のindexid == 1手段は、リスト上の特定のセルをクリックしてリストの場所を表示していることを意味し、価格のお気に入りのアイテムのリストを取得しています。 .しかし、ラベルはそれを隠していません アイテムのリストではなく、定価を表示します

lblText.text = nil;
btnBack.hidden = FALSE;
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{     
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
     cell.textLabel.highlightedTextColor = [UIColor orangeColor];

}

    /////////////////////   Cell Title    /////////////////////
    if (indexId == 1) 
    {
//        NSLog(@"%@",lblText1);
       cell.textLabel.text = [NSString stringWithFormat:@"%@", [test.arrTitle objectAtIndex:indexPath.row]];
        lblText = [[UILabel alloc] initWithFrame:CGRectMake(250, 7, 40, 30)]; // For right alignment
        lblText.text = [test.arrId objectAtIndex:indexPath.row];
        [lblText setTextAlignment:UITextAlignmentCenter];
        lblText.textColor = [UIColor redColor];
        lblText.backgroundColor = [UIColor clearColor];
        [cell addSubview:lblText];

       cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"products-category-bg.png"]];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        [lblText release];

    }
    else
    {
        lblText.hidden = YES;
        cell.textLabel.text = [NSString stringWithFormat:@"  %@", [test.arrTitle objectAtIndex:indexPath.row]];        

            cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"product-bg-hover.png"]];
    }       
    return cell;
}

次の問題があります。ラベルは正常に作成されていますが、戻るボタンをクリックすると、メインのテーブルビューにラベルの値が表示されます。

ラベルオブジェクトをデータで解放するにはどうすればよいですか?

ありがとうございます。それでは、お元気で

この問題から私を助けてください

4

3 に答える 3

0

アプリケーションのさまざまな状態に同じテーブル ビュー インスタンスを使用している場合は、以前に作成したセルも再利用しています。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

各セルで、indexid == 1これも行っている場合:

[cell addSubview:lblText];

私にとって、これは、作成した(そして再利用される)各セルにUILabelサブビューとして追加されていることを示しています。そのセルを本当に再利用するUILabelには、ロジックがセルを再度追加する必要があると言う前に、セルを削除する必要があります。これにより、セルが不要になったときにセルが削除されるだけでなく、実行時に余分な UILabel インスタンスをセルに追加することもできなくなります。チェックする前に、以下のコードを追加してみてくださいindexid

if (cell == nil)
{     
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
     cell.textLabel.highlightedTextColor = [UIColor orangeColor];
}

// Be sure to remove the UILabels on the re-used cell.
for(UIView *view in cell.subviews)
    if ([view isKindOfClass:([UILabel class])])
        [view removeFromSuperview];

if (indexid == 1) { ....

これにより、セルが作成されるたびに UILabel が削除され、条件付きでサブビューとして再追加できるようになります。

于 2013-03-14T14:49:48.970 に答える
0

ラベルにタグを設定してみてください(データをラベルに設定するのに役立ちます。呼び出すことでラベルを取得できます

[cell viewWithTag: theLabelTag]

ここで、theLabelTagタグはインデックスにすることができます)、ラベル値を設定します

tableView: willDisplayCell: forRowAtIndexPath:

それ以外の

tableView: cellForRowAtIndexPath:

于 2013-03-14T14:59:36.920 に答える
0

あなたのコードは私には問題ないように見えます。上記のコードの1行を下に書かれたリンクに置き換えるだけです

[cell.contentView addSubview:lblText];

その代わり

[cell addSubview:lblText];

問題が解決することを願っています。

于 2012-12-29T12:05:42.147 に答える