UITableViewCells恢复为默认值或其他值

时间:2013-12-12 15:45:15

标签: ios iphone objective-c uitableview

enter image description here

所以我创建了一个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;

3 个答案:

答案 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;
}