0

私が持っているカスタム UITableViewCell 実装で奇妙な問題が発生しています:

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

    ProfileTableViewCell *cell = (ProfileTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[ProfileTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    MyStory *myStory = (SavedStory *)[fetchedResultsController.fetchedObjects objectAtIndex:indexPath.row];
    [cell setupCellViewWithSavedStory:myStory];

    return cell;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithPulseStyle:PNRTableViewCellAccessoryDefault reuseIdentifier:@"SavedStories"];
    if (self) {

        storyImageView_ = [[UIImageView alloc] initWithFrame:CGRectMake(kPadding, kPadding, kImageSize, kImageSize)];
        storyImageView_.layer.borderWidth = 2.0;
        storyImageView_.layer.borderColor = [UIColor whiteColor].CGColor;

        storyTitleLabel_ = [[UILabel alloc] initWithFrame:CGRectMake(storyImageView_.frameRight + kPadding*1.5, storyImageView_.frameY, self.bounds.size.width - storyImageView_.frameWidth - 4*kPadding, 0)];
        storyTitleLabel_.numberOfLines = 0;
        storyTitleLabel_.lineBreakMode = UILineBreakModeClip;
        storyTitleLabel_.font = [UIFont fontWithName:kProximaNovaBold size:14];
        storyTitleLabel_.textColor = [UIColor whiteColor];
        storyTitleLabel_.backgroundColor = [UIColor clearColor];

        storyPublisherLabel_ = [[UILabel alloc] initWithFrame:CGRectMake(storyTitleLabel_.frameX, storyTitleLabel_.frameHeight, storyTitleLabel_.frameWidth, 50)];
        storyPublisherLabel_.numberOfLines = 1;
        storyPublisherLabel_.font = [UIFont fontWithName:kProximaNova size:11];
        storyPublisherLabel_.textColor = [UIColor colorWithWhite:140/255.f alpha:1.0];
        storyPublisherLabel_.backgroundColor = [UIColor clearColor];

        [self.contentView addSubview:storyImageView_];
        [self.contentView addSubview:storyTitleLabel_];
        [self.contentView addSubview:storyPublisherLabel_];

    }
    return self;
}

-(void)setupCellViewWithSavedStory:(MyStory *) myStory
{
    if (myStory.imageState == StoryImageAvailableOnDisk) {
        storyImageView_.hidden = NO;
        storyImageView_.image = myStory.image;
    }
    else {
        storyImageView_.image = nil;
        storyImageView_.hidden = YES;
    }

    CGSize titleSize = [myStory.title sizeWithFont:storyTitleLabel_.font constrainedToSize:CGSizeMake(storyTitleLabel_.frameWidth,  kImageSize - kPadding) lineBreakMode:storyTitleLabel_.lineBreakMode];
    [storyTitleLabel_ setFrameHeight:titleSize.height];
    [storyTitleLabel_ setText:savedStory.title];
    [storyPublisherLabel_ setText:savedStory.domain];
    [self setNeedsLayout];
}

しかし、何らかの理由で、下にスクロールしてもう一度上にスクロールするまで画像が表示されません。言い換えれば、画像は再利用され、画像を見ることができます。ラベルのテキストはすべて問題なく表示されています。これは単なる画像です。理由はありますか?

4

2 に答える 2

0

これを試しましたか?

if (cell == nil) {
            cell = [[ProfileTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            MyStory *myStory = (SavedStory *)[fetchedResultsController.fetchedObjects objectAtIndex:indexPath.row];
           [cell setupCellViewWithSavedStory:myStory];
     }
于 2012-09-21T22:59:28.220 に答える
0

このコードを追加してみてください:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyStory *myStory = (SavedStory *)[fetchedResultsController.fetchedObjects objectAtIndex:indexPath.row];
    [cell setupCellViewWithSavedStory:myStory];
}
于 2012-09-22T04:26:31.797 に答える