最新のiOS 5のUITableViewCellメソッドを使用するようにコードをリファクタリングしました。ただし、cellForRowAtIndexPathメソッドでデキューされているUITableViewCellsのサブビューは、同じセルのcontentViewまたは別のセルに再追加されています。UIViewがUITableViewCellに再追加されないようにする
セルのサブビューが他のセルにジャンプしてサブビューとして追加されないようにするにはどうすればよいですか?
ありがとうございました。
編集---
私はサブビューがサブビューとしてそれらを再度追加する前にゼロであり、それは完璧に動作するかどうかを確認するために私のコードを更新しましたが、唯一の3枚の画像をこれまで(各画像ビューに表示されますavatarImageViewおよびsnapImageView)。これは、if文が3回までしか実行されないためです。なぜこれが起こっているのか教えてください。
2012-01-06 03:25:39.497 App[1347:707] in snap
2012-01-06 03:25:39.500 App[1347:707] in avatar
2012-01-06 03:25:39.518 App[1347:707] in snap
2012-01-06 03:25:39.520 App[1347:707] in avatar
2012-01-06 03:25:42.593 App[1347:707] in snap
2012-01-06 03:25:42.595 App[1347:707] in avatar
更新されたコード::私のコンソールは、このようになります
私が正しくあなたを理解していれば
- (void) setPost:(TBPost *) _post {
if (post != _post) {
[post release];
post = [_post retain];
}
...
if (self.snap == nil) {
NSLog(@"in snap");
NSString *str = [[_post snaps] objectForKey:TBImageOriginalURL];
NSURL *url = [NSURL URLWithString:str];
[TBImageDownloader downloadImageAtURL:url completion:^(UIImage *image) {
[self setSnap:image];
}];
}
if ([self viewWithTag:-25] == nil) {
UIImageView *pinView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pin"]];
NSArray *r = [NSArray arrayWithObjects:@"-5", @"-4", @"-3", @"-2", @"-1", @"0", @"1", @"2", @"3", @"4", @"5", nil];
int place = self.frame.origin.x + (self.frame.size.width/2) - (pinView.frame.size.width/2) + [[r objectAtIndex:rand() % [r count]] intValue];
CGRect frame = [pinView frame];
frame.origin.x = place;
frame.origin.y = -5;
[pinView setFrame:frame];
[pinView setTag:-25];
[self addSubview:pinView];
[pinView release];
}
if (self.authorAvatar == nil) {
NSLog(@"in avatar");
NSURL *urls = [[[_post user] avatars] objectForKey:[[TBForrstr sharedForrstr] stringForPhotoSize:TBPhotoSizeSmall]];
[TBImageDownloader downloadImageAtURL:urls completion:^(UIImage *image) {
[self setAuthorAvatar:image];
}];
[self.authorAvatarImageView.layer setMasksToBounds:YES];
[self.authorAvatarImageView.layer setCornerRadius:10];
}
if ([self viewWithTag:-26] == nil) {
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"avatar_overlay"]];
[iv setFrame:[self.authorAvatarImageView frame]];
[iv.layer setMasksToBounds:YES];
[iv.layer setCornerRadius:6^7];
[iv setTag:-26];
[self addSubview:iv];
[iv release];
}
}
私はあなたが正確に尋ねていることは分かりませんが、あなたの 'UITableViewCell'サブクラス(あなたが投稿したと仮定して)がセルをクリーンアップする適切な' -prepareForReuse'メソッドを実装するはずです。 – mvds
ありがとう、それは間違いなくprepareForReuseメソッドとは関係ありませんが、セルを整理するために何を入れるべきかはわかりません。セル内のすべての変数は、2つのUIImageView、 'snapImageView'と' authorAvatarImageView'とは別に変更されています。 –
'-prepareForReuse'コードを投稿することができますか? – mvds