表格视图中的多个单元格选择

Posted

技术标签:

【中文标题】表格视图中的多个单元格选择【英文标题】:Multiple cell selection In tableview 【发布时间】:2011-05-12 05:41:52 【问题描述】:

我想将照片上传到 twitter、facebook 和 twit pic 等等。我把它放在数组中并显示在表格视图中。我正在使用 shareKit 。我编码就像如果我选择一个单元格(例如 Twitter)然后它将照片上传到 Twitter 我想选择多个单元格并在一个按钮上执行此发送操作(发送到选定的行项目)。我能够标记/取消标记单元格,但如何获取单元格的选定值。我不希望它处于表格的编辑模式..

代码:

-  (void) tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 


    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
        cell.accessoryType = UITableViewCellAccessoryNone;
    


    else 

        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    




【问题讨论】:

***.com/questions/308081/… 和 ***.com/questions/3040894/… 的副本 @IphoneDeveloper,如果你得到了正确的答案,为什么不投赞成票呢? 【参考方案1】:

sourceArray 成为您用来填充表格视图的数组。 而selectedObjects 是一个被选中的对象数组,初始化为包含 0 个对象。它应该是一个(私有)类实例变量。

//NSMutableArray *selectedObjects = [[NSMutableArray array] retain];

-  (void) tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    YouObjectType *object = [sourceArray objectAtIndex:indexPath.row]; //This assumes that your table has only one section and all cells are populated directly into that section from sourceArray.
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
        cell.accessoryType = UITableViewCellAccessoryNone;
        [selectedObjects removeObject:object];
    
    else 
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [selectedObjects addObject:object];
    

然后在你描述的按钮的发送动作方法中,使用selectedObjects数组中的对象做需要的操作。

【讨论】:

将单元格与 cellforRowAtIndexPath 一起使用是个坏主意。好点是将所有项目选择状态保存在一个数组中并在此处选中/取消选中它。然后调用 reloadData。【参考方案2】:

您也可以使用表格视图中的复选标记来制作它,例如..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)path 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
 if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
cell.accessoryType = UITableViewCellAccessoryNone;
 else 
cell.accessoryType = UITableViewCellAccessoryCheckmark;


【讨论】:

【参考方案3】:

您可以在一个数组中管理它选择了哪个单元格,当您选择一行时,然后在 didSelectRowAtIndexPath 中根据上述条件更新该数组并在您上传图像时使用该数组。例如 - 你有一个数组,它有字典两个对象,键 @"image" 和 @"isSelected" 并用这个数组填充表,当你选择一行时,然后从数组中访问元素作为 indexPath.row 的字典对象并为键“isSelected”更新字典“true”或“flase”。

【讨论】:

您可以参考任何示例或链接吗?【参考方案4】:

在didSelectRowAtIndexPath中获取indexPath.row,可以知道选择了哪个单元格。

【讨论】:

【参考方案5】:

你可以使用这个 github repo JLSelectionTVC (https://github.com/nvrtdfrst/JLSelectionTVC) 来完成这个

【讨论】:

以上是关于表格视图中的多个单元格选择的主要内容,如果未能解决你的问题,请参考以下文章

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

在iOS中选择多个表格视图单元格的本机方式[关闭]

如何根据集合视图中的单元格选择来控制表格视图的内容?

表格单元格视图中的多个标签

如何使用 Swift 在 XCode UI 自动化中选择随机表格视图单元格

在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格