跟踪当前选定的索引路径和先前选择的索引路径

时间:2011-06-15 01:02:04

标签: iphone objective-c uitableview

我想在点击一次时插入当前所选行下方的单元格,并在再次点按时删除该单元格。

如果用户点击新行,我还想从上一个选定行中删除插入的单元格。

为了实现这一目标,我认为我需要跟踪当前选择的索引路径和之前选择的索引路径,但我不知道如何实现这一目标。

这是我到目前为止所做的:

- (BOOL)cellIsSelected:(NSIndexPath *)indexPath {

    // Return whether the cell at the specified index path is selected or not
    NSNumber *selectedIndex = [self.theSelectedIndexes objectForKey:indexPath];

    return selectedIndex == nil ? FALSE : [selectedIndex boolValue];

}

didSelectRowAtIndexPath

// I have a method that tracks if a cell is selected and if its deselected. This is what i'm using to insert a cell when selected and remove it when deselected.    


if ([self cellIsSelected:indexPath]) {

    [self.tableView beginUpdates];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];
}else {
    [self.tableView beginUpdates];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];
}
cellForRowAtIndexPath中的

// I use the same method to insert a new cell if the cell is selected or deselected

if [self cellIsSelected:indexPath]{
    // allocate new cell below selected cell
else
    // allocate standard view cell

此时它有点起作用;当我选择一个单元格时,我会在其位置插入一个新单元格,当我再次点击它时,它将恢复为常规单元格。

当我在选择前一个单元格后开始选择其他行时,我遇到了问题。

我不知道我是否正确地这样做,我正在学习。

我以为我会请这里的人帮帮我。

你们可以帮助我,并提供一个例子,告诉我如何做到这一点,如果它没有麻烦,所以我可以理解如何做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

跟踪上次选择的路径

NSIndexPath *lastIndex = [table indexPathForSelectedRow]; 

并将最后一个索引与当前索引进行比较

if(([indexPath compare:lastIndex] == NSOrderedSame)