Ios UItableViewCell具有多个标签的自定义ContentView,需要保留选择
我有一个Ios UItableViewCell具有多个标签的自定义ContentView,需要保留选择,ios,uitableview,state-management,multipleselection,Ios,Uitableview,State Management,Multipleselection,我有一个UITableView,每个单元格中有多个UILabels,就像网格视图一样。我添加了一个UIgestureRecognitor,对每个标签执行一些操作(例如更改其背景)。一切正常 但问题是,每当我向上或向下滚动时,在单元格中选择的标签都会失去其选择状态。当我搜索时,一些人建议我使用不同的单元格ID创建单元格,或者改用UIScrollView,但与在UITableViewCell的contentView中添加多个标签相比,这两种方法将使用更多的内存 滚动时,如何在每个单元格中保留UILa
UITableView
,每个单元格中有多个UILabel
s,就像网格视图一样。我添加了一个UIgestureRecognitor
,对每个标签执行一些操作(例如更改其背景)。一切正常
但问题是,每当我向上或向下滚动时,在单元格中选择的标签都会失去其选择状态。当我搜索时,一些人建议我使用不同的单元格ID创建单元格,或者改用UIScrollView
,但与在UITableViewCell
的contentView
中添加多个标签相比,这两种方法将使用更多的内存
滚动时,如何在每个单元格中保留
UILabel
s的选择状态?我想到的第一件事是创建一个存储标签状态的nsmutablearray,然后在cellForIndexPath:
中使用此数组来设置标签的背景。这应该是可行的,但可能有一个更好的解决方案,感觉不太像黑客。因为选择状态对于准确绘制每个单元格是必需的,所以您应该将每个标签状态的属性添加到单元格的支持模型对象中。然后在tableView:cellforrowatinexpath:
中,可以从模型对象确定每个标签的正确选择状态:
- (void)tableView:(UITableView*) cellForRowAtIndexPath:(NSIndexedPath*)path {
CustomCell *cell; // trimmed for brevity
CellModelObject *modelObject; // this would be pulled from an array, dictionary, or some other collection
cell.firstLabel.selected = modelObject.isFirstLabelSelected;
cell.secondLabel.selected = modelObject.isSecondLabelSelected;
// etc.
return cell;
}
随着表格的滚动和单元格的重复使用,其状态将在cellforrowatinexpath
中设置,而不管单元格之前显示了什么