UIWebView を含むセルを含む UITableView があり、テーブルに 2 つの問題があります。最初に、Web ビューがそのセルをカバーしているため、セルが少し奇妙に見えます。
2 番目のより深刻な問題であり、このスレッドの主な問題は、テーブルをスクロールしたときに発生する破損です。ランダムに Web ビューが間違ったセルにレンダリングされ、スクロールが速くなればなるほど、このように破損するセルが増えます。ゆっくりスクロールすると、すべてが正常にレンダリングされます。
テーブルが最初に描画されると、正しくレンダリングされます。ユーザーがテーブルをスクロールしたときにのみ、悪化し始めます。それが台無しになると、UIWebView が表示されるべきではないセルの一部に表示されます。これは、ゆっくりとスクロールしない限り発生し、スクロールが速いほど悪化します。これらのセルにはアクティブなライブ Web ビューがあるべきではないため、これは単なるグラフィカルな不具合ではありません。また、最初のセルのセル アクセサリ アイコンが、なしから三角形に変更されていることにも気付きました。これの画像をいくつか投稿してみましたが、新人すぎて許可されません (スパマーがみんなの楽しみを台無しにしています)
cellForRowAtIndexPath のコードは次のとおりです。優しくしてください 私はこれがどのように機能するかを学んでいます. :)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierMediaType];
switch ([indexPath section]) {
case 0: {
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierLongDescription];
}
[cell.contentView addSubview:self.longDescriptionWebView];
break;
}
case 1: {
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierMediaType];
}
NSDictionary *cellDict = [self.subMediaTypes objectAtIndex:[indexPath row]];
cell.textLabel.text = [cellDict objectForKey:@"SHORT_DESCRIPTION"];
break;
}
default:
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierMediaType];
}
break;
}
return cell;
}
最初に cellForRowAtIndexPath で再利用セルを定義しようとしましたが、同じ結果が得られたため、セルを移動してインスタンス変数として設定しました。これも機能しますが、まだ破損の問題があるため、再利用セルを設定していた場所は実際には問題ではなかったと推測しています。再利用セルを設定するコード ブロックを次に示します。
if (!self.mediaTypeCell) self.mediaTypeCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierMediaType];
if (!self.longDescriptionCell) self.longDescriptionCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierLongDescription];
if (!self.longDescriptionWebView) self.longDescriptionWebView = [[UIWebView alloc] initWithFrame:self.longDescriptionCell.bounds];
self.mediaTypeCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
self.longDescriptionCell.accessoryType = UITableViewCellAccessoryNone;
[self.longDescriptionCell.contentView addSubview:self.longDescriptionWebView];
self.longDescriptionCell.contentView.autoresizesSubviews = YES;
self.longDescriptionWebView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.longDescriptionWebView loadHTMLString:self.mediaTypeLongDescription baseURL:nil];
テーブルには 2 種類のセルのみが必要です。Web ビュー (longDescriptionCell) を含むアクセサリのない単一のセルがあり、テーブルの残りの部分には、開示インジケーター アクセサリを含む単純なテキスト文字列 (mediaTypeCell) を保持するセルが含まれます。