我在重复使用多个自定义UITableViewCell
时出现问题。我有3种类型的自定义UITableViewCell
。我尝试使用UITableViewCell
重复使用dequeueReusableCellWithIdentifier
。
我写了prepareForReuse
并将所有可能的子视图数据设为零。但是我仍然在某些UITableViewCell
中重复了一些数据。所以我想在没有任何数据的情况下重复使用xib。
我编写了以下代码。该应用程序现在似乎有一些冻结问题。有人请告诉我在没有数据重复的情况下重用tableview UITableViewCells
的正确方法。
static NSString *cellIdentifier = @"SystemListCell";
IXSystemMessageCustomCell *cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"IXSystemMessageCustomCell" owner:self options:nil] objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
IXSystemMessageCustomCell *cellToSave = cell;
[self configureSystemCell: cellToSave atIndexPath:indexPath];
return cellToSave;
答案 0 :(得分:0)
请勿修改prepareForReuse
更好的方法是
dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath
我们应该始终修改cellForRowAtIndexPath
中的数据,因为这有助于重复使用单元格。
此外,由于您已经创建了IXSystemMessageCustomCell
类,因此最好使用它:
[[IXSystemMessageCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]
并在initWithStyle:reuseIdentifier:
而不是:
cell = [[[NSBundle mainBundle] loadNibNamed:@"IXSystemMessageCustomCell" owner:self options:nil] objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
干杯!
答案 1 :(得分:0)
您可以为3种细胞类型使用3种不同的重用标识符:
IXSystemMessageCustomCell *cell;
if (some condintion) {
cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:"CellReuseIdentifierType1"];
} else if (some condition 2) {
cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:"CellReuseIdentifierType2"];
} else {
cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:"CellReuseIdentifierType3"];
}
在这种情况下,您不需要每次为每种细胞类型重新配置细胞
答案 2 :(得分:0)
试试这个......
IXSystemMessageCustomCell *cell = nil;
cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
通过首先将单元格设置为nil,您将清除与重用单元格关联的先前数据。
还要在viewDidLoad
或类似的表格视图生命周期方法中注册您的笔尖一次,这样在每次调用tableView:cellForRowAtIndexPath
时都不需要这样做。
因此,从任何方法中提取静态调用都是私有声明......
static NSString *cellIdentifier = @"SystemListCell";
并调整您的方法以阅读...
- (void)viewDidLoad {
UINib *nib = [UINib nibWithNibName:@"IXSystemMessageCustomCell" bundle:nil];
[<<self.tableView>> registerNib:nib
forCellReuseIdentifier:cellIdentifier];
<< ... other code ... >>
}
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
IXSystemMessageCustomCell *cell = nil;
cell = (IXSystemMessageCustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[self configureSystemCell:cell atIndexPath:indexPath];
return cell;
}