问题描述
我想在轻按一次时在当前选定的行下方插入一个单元格,并在再次轻按时删除该单元格。
如果用户点击新行,我也想从上一个选定行中删除插入的单元格。
为了实现这一点,我想我需要跟踪当前选择的索引路径和先前选择的索引路径,尽管我不知道如何实际实现。
这是我到目前为止所拥有的:
- (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
在这一点上,它已经可以工作了。当我选择一个单元格时,我会在其位置插入一个新的单元格,当我再次点击它时,它会恢复为常规单元格。
但是,当我仅选择一次上一个单元格后开始选择其他行时,就会遇到问题。
我不知道我是否正确地做到了,我正在学习。
我以为我会请这里的家伙帮我。
你们可以帮助我,并提供一个示例说明如何在没有问题的情况下执行此操作,以便我可以理解如何执行此操作。
谢谢!
解决方法
跟踪最后选择的路径
NSIndexPath *lastIndex = [table indexPathForSelectedRow];
并比较上一个索引与当前索引
if(([indexPath compare:lastIndex] == NSOrderedSame)