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