所以我创建了一个TableView,如下所示,但我有一个非常讨厌的问题。
当我来到这个VC时,我点击选择用户,我选择了用户Atoshum。
当我向下滚动时,当我滚动底部单元格时,此顶部单元格将离开屏幕。
当我向上滚动时,单元格已恢复为默认值(或偶尔会获取另一个单元格的值)。
我制作细胞。
static NSString *CellIdentifier = @"Cell";
DMSDrugInstanceCell *Cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!Cell) {
Cell = [[DMSDrugInstanceCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Cell.chooseUserButton.tag = indexPath.row;
[Cell.chooseUserButton addTarget:self
action:@selector(performSegue:)
forControlEvents:UIControlEventTouchUpInside];
return Cell;
答案 0 :(得分:3)
在单元格创建中,您永远不会设置任何值。您所做的只是设置标记,然后添加事件目标。如果您希望它保持选择,您需要在制作时保存/保存该选项,然后在单元格创建中,根据保存的值进行设置。
答案 1 :(得分:1)
您正在重复使用表格单元格。因此,每次重新加载单元格时,都需要在单元格中设置值。
在cellForRowAtIndexPath方法中,需要根据索引路径在单元格中设置值。
答案 2 :(得分:1)
这是因为UITableView不会为元素总数创建新单元格。相反,它重新使用不在可见度的细胞。因此,您认为您的数据已重置或反映在其他单元格上。
最好的方法是将所有数据存储在某个数组中(让它为tagDataArray),然后将单元格设置为
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
DMSDrugInstanceCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[DMSDrugInstanceCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Cell.chooseUserButton.tag = [tagDataArray objectAtIndex:indexPath.row];
...
...
return Cell;
}