didselectrowatindexpath,在 Tableview 中选择和取消选择行

Posted

技术标签:

【中文标题】didselectrowatindexpath,在 Tableview 中选择和取消选择行【英文标题】:didselectrowatindexpath, Select and Deselect rows in Tableview 【发布时间】:2013-12-03 09:54:38 【问题描述】:

我有一个视图行,我想第一次按标签选择一行(或更多行)。这没问题,但我喜欢第二次按标签取消选择一行。 一些想法? 期待您的到来。 问候哈奇

【问题讨论】:

【参考方案1】:

使用此示例代码进行复选标记选择:https://github.com/vikingosegundo/checkmark/tree/master/Checkmark

设置附属视图需要在 tableView:cellForRowAtIndexPath: 方法中进行。当你想从外部更换配件时,外部方法需要先更改模型,表明必须在某些单元格中打上复选标记,然后在UITableView上调用reloadData。

存储检查的单元格的一种方法是 NSIndexSet 对象数组 - 每个部分设置一个索引。在下面的示例中,我展示了单个部分的代码,但您应该了解如何使多个部分工作。

// This variable needs to be declared in a place where your data source can get it
NSMutableIndexSet *selected;

// You need to initialize it in the designated initializer, like this:
selected = [[NSMutableIndexSet alloc] init];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    
    if ([selected containsIndex:indexPath.row]) 
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
     else 
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    
    // Do the rest of your code
    return cell;

现在,在您要设置选中或未选中行的代码中,您只需调用 [selected addIndex:rowToSelect] 或 [selected removeIndex:rowToUnselect],然后调用表的 reloadData。

【讨论】:

以上是关于didselectrowatindexpath,在 Tableview 中选择和取消选择行的主要内容,如果未能解决你的问题,请参考以下文章

tableView - didSelectRowAtIndexPath 未调用

在 didSelectRowAtIndexPath 中呈现缓慢的 ViewController

我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?

在 didselectRowAtIndexPath 之后 UITableView 无法滚动底部

在 tableView 上使用 CustomCell,如何调用 didSelectRowAtIndexPath?

didSelectRowAtIndexPath 不会在 ViewController 中触发