Ios UITableViewCell附件多个部分

Ios UITableViewCell附件多个部分,ios,objective-c,uitableview,Ios,Objective C,Uitableview,当用户选择时,我正在尝试向UITableViewCell添加复选标记。我有以下代码: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; if (selectedCell.access

当用户选择时,我正在尝试向
UITableViewCell
添加复选标记。我有以下代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
        selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
该表有多个部分,问题是如果我选择一行,复选标记会在不同部分的其他行中重复。当您上下滚动页面时,复选标记也会在每个部分的行之间移动。我已经设法在表格中循环并记录了有多少行带有附件复选标记,并且每次它是应该的数字时,它都不会计算添加的其他行,而我也不想这样做


非常感谢您的帮助。

当您在视图上下滚动时,
UITableView
将重复使用您设置为选中的单元格

正确的方法是跟踪模型对象中的选择,或者检入
tableView:cellForRowAtIndexPath:
以查看
indexPath
是否位于表视图的
indexPathsForSelectedRows
中,并且在这种情况下仅显示复选标记。因为对重复使用的单元格和新创建的单元格都调用了
cellforrowatinexpath:
,所以在这两种情况下都不应该遇到此问题

这假设您已将
tableView设置为
YES



当您上下滚动视图时,
UITableView
将重复使用您设置为选中的单元格

正确的方法是跟踪模型对象中的选择,或者检入
tableView:cellForRowAtIndexPath:
以查看
indexPath
是否位于表视图的
indexPathsForSelectedRows
中,并且在这种情况下仅显示复选标记。因为对重复使用的单元格和新创建的单元格都调用了
cellforrowatinexpath:
,所以在这两种情况下都不应该遇到此问题

这假设您已将
tableView设置为
YES



谢谢你的快速回复。您有任何示例代码吗?我理解你的逻辑,但不懂语法。谢谢,阿加尼特仍然在产生同样的效果。我对单元格的初始化不正确吗?@robbiecutting您能用当前代码更新您的问题吗?还要检查以确保
indexPathsForSelectedRows
包含您认为应该包含的路径。如果没有,请发布所有与
UITableView
相关的代码。在编辑过程中使用AllowsMultipleSelection功能是否更容易实现我需要的功能?这正是我所需要的。唯一的问题是我需要限制一次可以做出的选择的数量。再次感谢您的建议。您的问题中没有任何内容表明您处于编辑模式:)您当然可以将其设置为
YES
,然后在
tableView:didSelectRowAtIndexPath:
中检查
indexPathsForSelectedRows
的计数,如果超出您的限制,则拒绝选择。拒绝可能是更改
将选择RowatineXpath
以返回
nil
,或者只是立即调用
[tableView取消RowatineXpath:indexPath:NO]
。感谢您的快速回复。您有任何示例代码吗?我理解你的逻辑,但不懂语法。谢谢,阿加尼特仍然在产生同样的效果。我对单元格的初始化不正确吗?@robbiecutting您能用当前代码更新您的问题吗?还要检查以确保
indexPathsForSelectedRows
包含您认为应该包含的路径。如果没有,请发布所有与
UITableView
相关的代码。在编辑过程中使用AllowsMultipleSelection功能是否更容易实现我需要的功能?这正是我所需要的。唯一的问题是我需要限制一次可以做出的选择的数量。再次感谢您的建议。您的问题中没有任何内容表明您处于编辑模式:)您当然可以将其设置为
YES
,然后在
tableView:didSelectRowAtIndexPath:
中检查
indexPathsForSelectedRows
的计数,如果超出您的限制,则拒绝选择。拒绝可能是更改
将选择rowatinexpath
以返回
nil
,或者只是立即调用
[tableView取消rowatinexpath:indexath:NO]
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = // do some initing here

    // determine if this cell is currently selected
    if ([tableView.indexPathsForSelectedRows containsObject:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}