0

我正在考虑使用 for 循环,但想知道是否有任何内置方法可以实现这一点。基本上在一个视图中,我有一个带有对象列表的表格视图,用户可以根据需要单击任意数量,“检查”它们。当他们转到下一个字符串时,我想用所选名称填充另一个表视图。

这是我的选择方法:

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


    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone)
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    else
        cell.accessoryType = UITableViewCellAccessoryNone;

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

我正在考虑编写一个包含 for 循环的方法,该循环遍历从中提取表视图的数组中的每个值,并仅将具有正确附件类型的那些值添加到新数组中。有任何想法吗?

4

1 回答 1

3

使用 NSMutableIndexSet 支持您的选择会是更多 MVC。否则,如果用户选择了一个单元格,但随后将该单元格滚动出框架并出列,会发生什么情况?

在您的界面中声明一个属性:

@property (strong) NSMutableIndexSet* selected;

在 viewDidLoad 或类似的地方实例化它然后在你的委托方法中修改它:

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

    if (![self.selected containsIndex:indexPath.row])
    {
        [self.selected addIndex:indexPath.row];
    }
    else
    {
        [self.selected removeIndex:indexPath.row];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

在您的 cellForRowAtIndexPath: 方法中,决定是否显示复选标记:

cell.accessoryType = [self.selected containsIndex:indexPath.row] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

现在,当您想要选定的对象时,只需

return [self.myObjects objectsAtIndexes:self.selected];

注意:当我第一次发布此内容时,它确实未经测试。从那以后,我做了一些改变。例如,您只想在 cellForRowAtIndexPath: 方法中设置附件类型

于 2012-04-12T01:15:21.413 回答