Iphone 将UITableView配置为包含性选择列表时出现问题

Iphone 将UITableView配置为包含性选择列表时出现问题,iphone,uitableview,Iphone,Uitableview,我正在对UITableView进行编程,使其作为包含性选择列表。“我的表格”显示正确,并允许通过复选框选择多个单元格。我的问题是,已选中的单元格(单元格右侧包含复选标记)在滚动出视图时会失去其选中状态(单元格复选标记消失)。我想保留对表中单元格所做的选择,即使单元格被滚动到视图之外。有人知道这是什么原因吗 以下是我的TableViewController类中的代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRo

我正在对UITableView进行编程,使其作为包含性选择列表。“我的表格”显示正确,并允许通过复选框选择多个单元格。我的问题是,已选中的单元格(单元格右侧包含复选标记)在滚动出视图时会失去其选中状态(单元格复选标记消失)。我想保留对表中单元格所做的选择,即使单元格被滚动到视图之外。有人知道这是什么原因吗

以下是我的TableViewController类中的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSUInteger row = [indexPath row];
cell.textLabel.text = [widgetTitles_glob objectAtIndex:row];
cell.detailTextLabel.text = @"";
cell.textLabel.textColor = [UIColor blackColor]; 
cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
cell.accessoryType = UITableViewCellAccessoryNone; 
return cell;
}

}


任何帮助都将不胜感激

在cellForRowAtIndexPath中:您将accessoryType分配为none,因此每当您滚动该委托并将附件类型设置为none时,都会调用该委托。所以你应该改变你的代码

我也曾经面对过这个问题;我想出了一个解决办法如下


将选定indexPath的indexPath.row值存储在数组中(此代码应位于DidSelectRowatineXpath委托中),如果取消选择,则从该数组中删除。在cellForRowAtIndexPath:方法中,我使用了一个for循环并检查该indexath.row是否存在,然后将其附件类型更改为选中else none。

感谢您的帮助。事实证明,单元格被重置为UITableViewCellAccessorOne的原因是cellForRowAtindexPath中的以下代码行:

cell.accessoryType = UITableViewCellAccessoryNone; 

移除此项已修复该表

正确使用UITableView时,只会根据需要分配尽可能多的UITableViewCell实例以适应屏幕。当您向下滚动表格时,一个单元格从屏幕顶部消失,它将重新定位到底部

您的委托方法,
tableView:cellForRowAtIndexPath:
负责设置单元格,创建新的单元格或重新配置回收的单元格

正确的做法是使用数组存储选中/未选中的值。调用
didselectRowatineXpath:
时,您将更新单元格和数组。调用
tableView:cellforrowatinexpath:
时,可以根据数组中的值配置单元格


根据您的评论,您已经在
didSelectRowAtIndexPath:
中做了正确的事情;您只需要在设置单元格实例时使用这些值,因为该单元格可以表示已检查的行。检查数组,然后相应地设置
cell.accessoryType

if(cell==nil)条件不应该在分配完表中的所有单元格后保留它们吗?不应该只存储indexPath.row,应该存储整个indexPath。如果选中“如果([selectedRows containsObject:indexPath.row])cell.accessoryType=UITableViewCellAccessoryCheckmark;else cell.accessoryType=UITableViewCellAccessoryNone;'然后,当您滚动时,每个部分中的所有第一行都将被选中。您应该保存整个indexPath,因为它同时保存节和行。不,这无法修复它。。。现在,当您滚动时,检查将随机出现/消失。好的,我确实希望单元格代表NSUserDefaults对象的状态,因此我将使用您的建议,根据默认值更新单元格,以及在选择单元格时更新默认值。谢谢
cell.accessoryType = UITableViewCellAccessoryNone;