2012-04-05 16 views
0

私のWebサービスにいくつかの製品があります。私はそれから製品名を得て、ラベル・テキストを使ってテーブルビューに表示しています。そして私はそれを得た。今私の問題は、私のテーブルビューでいくつかの製品を選択しているとき、私のdidselectrowatindexpathが空であっても、私のラベルは私の既存のラベルテキストを再読み込みして上書きします。私はこれを使用しましたiPhone sdkのuitableviewでラベルテキストの再読み込みを避けるにはどうすればいいですか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; 
} 
    bookName = [[UILabel alloc]initWithFrame:CGRectMake(100, 3, 180, 25)]; 
    NSString *text = [NSString stringWithFormat:@"%@",[[stories objectAtIndex:indexPath.row] objectForKey: @"product_name"]]; 
    bookName.text = text; 
    bookName.textAlignment = UITextAlignmentCenter; 
    bookName.lineBreakMode = UILineBreakModeWordWrap; 
    [bookName setTextColor:[UIColor blackColor]]; 

    CGSize expectedLabelSize = [text sizeWithFont:bookName.font constrainedToSize:bookName.frame.size lineBreakMode:UILineBreakModeWordWrap]; 
    CGRect newFrame = bookName.frame; 
    newFrame.size.height = expectedLabelSize.height; 
    bookName.frame = newFrame; 
    bookName.numberOfLines = 0; 
    [bookName sizeToFit]; 
    [cell.contentView addSubview:bookName]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 
+0

確かに...この問題にご意見をお寄せください。 – user579911

+0

セルをどこに割り当てるのですか?静的セルを使用していますか? – Ilanchezhian

+1

cellforrowatindexpath内にのみ割り当てます – user579911

答えて

2

cellForRowAtIndexPathメソッドを使用します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
    } 

    UILabel *bookName = (UILabel*)[cell.contentView viewWithTag:1001]; 
    if(!bookName) 
    { 
     bookName = [[UILabel alloc]initWithFrame:CGRectMake(100, 3, 180, 25)]; 
     [cell.contentView addSubview:bookName]; 
     bookName.tag = 1001; 
     bookName.numberOfLines = 0; 
     bookName.textAlignment = UITextAlignmentCenter; 
     bookName.lineBreakMode = UILineBreakModeWordWrap; 
     [bookName setTextColor:[UIColor blackColor]]; 
    } 

    NSString *text = [NSString stringWithFormat:@"%@",[[stories objectAtIndex:indexPath.row] objectForKey: @"product_name"]]; 
    bookName.text = text; 

    CGSize expectedLabelSize = [text sizeWithFont:bookName.font constrainedToSize:bookName.frame.size lineBreakMode:UILineBreakModeWordWrap]; 
    CGRect newFrame = bookName.frame; 
    newFrame.size.height = expectedLabelSize.height; 
    bookName.frame = newFrame; 
    [bookName sizeToFit]; 
} 
+0

素敵で素早い対応をくれてありがとう。 – user579911

3

次のコードをUILabelコードのすぐ上に追加してください。これは役に立ちます。

for(UIView *view in cell.contentView.subviews) 
{ 
    [view removeFromSuperview]; 
} 
+0

ありがとうございました。 – user579911

関連する問題