重新加载除一个单元格之外的表格视图

Posted

技术标签:

【中文标题】重新加载除一个单元格之外的表格视图【英文标题】:Reload Table View Except for One Cell 【发布时间】:2016-07-06 07:27:57 【问题描述】:

我有一个包含可搜索数据的表格视图和一个包含可编辑文本字段(可使用pickerView 编辑)的单元格。我正在使用 pickerView 来选择要显示的 tableview 部分。但是,当在 pickerView 中选择了新行时,我不希望 pickerView 被关闭,这是我使用时会发生的情况

[self.tableView reloadData];

我尝试了以下方法来解决问题,尝试重新加载表格,但包含 textField 的单元格除外:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

NSIndexSet *toReload = [[NSIndexSet alloc] initWithIndex:1];
if (row == 0)

    self.selectedDepartmentField.text = @"All";
    toReload = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 13)];

else

    self.selectedDepartmentField.text = [self.departments objectAtIndex:(row - 1)];

[self.tableView reloadSectionIndexTitles];
[self.tableView beginUpdates];
[self.tableView reloadSections:toReload withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

这会因 EXC_BAD_ACCESS (code=1,address=0x28) 而崩溃

我应该如何重新加载表中的数据以保持 pickerView 处于活动状态?

【问题讨论】:

你的表中有多少个部分? 当pickerView选择第0行时,会有14个section。当它在任何其他行上时,将有 2 个部分 哪一行触发了崩溃?如有必要,启用 Exceptions 断点以找出答案。 [self.tableView endUpdates]; 【参考方案1】:

以下是一种可能的方法

    获取NSIndexPath的数组

    NSArray *visibleIndexPaths = [self.tableView indexPathsForVisibleRows];
    

    使用选择器从visibleIndexPaths 中删除单元格的索引路径。

    使用以下方法重新加载表格视图

    [self.tableView reloadRowsAtIndexPaths:visibleIndexPaths withRowAnimation:UITableViewRowAnimationNone];
    

这应该用选择器重新加载除一个以外的所有可见单元格。

【讨论】:

这对我不起作用,出现错误“尝试将第 0 行插入第 2 部分,但更新后只有 2 个部分”。我认为这可能是因为表格视图更新时行和节较少。

以上是关于重新加载除一个单元格之外的表格视图的主要内容,如果未能解决你的问题,请参考以下文章

从自定义单元格重新加载表格视图数据

如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift

重新加载单元格中没有图像的表格视图重新加载

使用 Swift 在表格视图中重新加载单元格数据

自动大小表格视图单元格扩展高度中的嵌套水平集合视图使集合视图滚动重置当重新加载单元格以累积行

重新加载表格视图后出现最后一个静态单元格分隔线