【问题标题】: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;
    }



}

【问题讨论】:

标签: iphone uitableview


【解决方案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) 来完成这个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多