0

Web サービスにいくつかの製品があります。そこから製品名を取得し、ラベル テキストを使用してテーブルビューに表示しています。そして、私はそれを手に入れました。私の問題は、テーブルビューで製品を選択すると、didselectrowatindexpath が空の場合でも、ラベルが再ロードされ、既存のラベル テキストで上書きされることです。これを使った、

- (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 
{

}
4

2 に答える 2

3

UILabel コードのすぐ上に次のコードを追加します。

for(UIView *view in cell.contentView.subviews) 
{
    [view removeFromSuperview]; 
}
于 2012-04-05T10:59:57.203 に答える
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];
}
于 2012-04-05T11:02:50.917 に答える