我有一个 UITableView,其中有一个单元格,其中有一个 UIWebView,我的表格有 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];
该表只需要两种类型的单元格。有一个没有附件的单元格包含 Web 视图 (longDescriptionCell),而表格的其余部分包含包含带有披露指示符附件的简单文本字符串 (mediaTypeCell) 的单元格。