我创建了一个自定义的 UITableViewCell
。 WTNCurrentLocationSearchResultCellTableViewCell
。
我们将来自 API 的数据解析为数组。然后在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中,我们检查数组是否不为 nil,然后像这样填充数据:
WTNCurrentLocationSearchResultCellTableViewCell *searchResultCell = [tableView dequeueReusableCellWithIdentifier:searchResultCellName];
if (searchResultCell == nil) {
searchResultCell = [[WTNCurrentLocationSearchResultCellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:searchResultCellName];
}
WTNAPIBusiness *business = self.apiBusinesses[indexPath.row];
searchResultCell.distanceLabel.text = [NSString stringWithFormat:@"%d %@",(int)[business.distanceFromLocation integerValue], @"meters"];
问题
我们有一个用于评级的 subview 。如果您滚动到表格底部并快速返回顶部,最后的评级 View 将显示在顶部单元格中。
我想正在发生的事情是,根据 dequeueResuable...
正在“重用”单元格。
所以问题是,我是否应该清理 cellForRowAtIndex
开头的单元格对象/ socket ? 更重要的是,如果我们有一个只有在有特定值时才会显示的 View ,否则我们应该在这里做什么? IE。如果没有评级或 0 我们不想显示评级 View 。但是,通过从 superview 中删除评分 View ,这意味着它以后将永远不会存在于单元格上吗?
注意:这些是在 IB 中创建的自定义单元格,其对象/ socket 链接到自定义 UITableViewCell
类。该类没有自定义初始化方法,它仅用于引用 socket 。
最佳答案
通常,您希望避免在重用期间更改单元格的结构。使用一组静态 View 设置每种类型的单元格。然后根据数据根据需要显示/隐藏 View 。
关键是您要在 tableView:cellForRowAtIndexPath:
方法中完全配置单元格。如果给定 View 不包含数据,请将内容设置为空或隐藏 View 。不要假设单元格一开始是空白的。它不会。
不要将 View 设置为零。不要将 (string) 内容设置为 nil。相反,要么将字符串内容设置为空字符串:@"",要么将 View 设置为 hidden=YES
。
如果上面 Hao 概述的代码不起作用,则说明有问题。
听起来你很困惑。我建议保持简单,不要使用 prepareForReuse 或 didEndDisplayingCell。在 tableView:cellForRowAtIndexPath:
方法中完成所有工作。
关于ios - 从自定义 UITableViewCell 添加和删除自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23657931/