首先要说我已经看到了这些问题:
第一个和最后一个似乎与我的问题非常相关,但是我相当确定每个部分都有逻辑来确定单元格(数据)中应该出现的内容,但它们仍然混淆了。
以下是相关代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Note: the if (cell == nil) thing is no longer required in iOS 6
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (closestRenter != nil)
{
NSLog(@"CLOSEST RENTER!");
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
}
else
{
NSLog(@"NO CLOSEST RENTER");
[self setupCellsWithNoClosestRenterCell:cell atIndexPath:indexPath];
}
if (indexPath.section == 0)
{
for (UIView *view in cell.contentView.subviews)
{
NSLog(@"WHAT THE HECK");
[view removeFromSuperview];
}
}
return cell;
}
相关信息在这里:
1) ClosestRenter 不是零……它存在。所以永远不应该执行 else 子句……就是这样。
2)在代码中:
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
有一个简单的:
if (indexPath.section == 0)
{
cell.textLabel.text = @"PLACE HOLDER";
}
else
{
// Populate the cell with data. (creates a view (with controller etc) and loads it into the cell)
}
3) 始终有 2 个部分。
问题是第 0 节(第一节)应该只有那个占位符字符串。第 1 节应该包含我的自定义子视图(在单元格中,它确实如此)。
第 0 部分最初只有占位符字符串,但是一旦我向下滚动(并且该部分不再可见)并向上滚动(快速),它有时会从第 1 部分中出现看似随机的单元格......这到底是什么?如何?我不愿意责怪细胞重用,但在这一点上,除了一些非常愚蠢的事情之外,我不知道它是什么。
这里令人不安的部分是第 0 节中的单元格(那里只有 1 行)没有子视图。但是当我快速上下滚动时,它会得到一个(显然来自第 1 节),然后我会收到“WHAT THE HECK”日志消息......
值得一提的是,使用 for 循环(带有什么鬼消息的循环)确实解决了问题(因为它删除了不需要的子视图),但必须有更好的方法。现在感觉不对。
有任何想法吗?
(请随意将其标记为重复,但我相当肯定这里还有其他事情发生)。
谢谢。