使用以下委托方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PLOTCheckinTableViewCell *cell = (PLOTCheckinTableViewCell *)[self.checkinsTableView dequeueReusableCellWithIdentifier:CheckinCellIdentifier forIndexPath:indexPath];
[cell setSwipeGestureWithView:crossView color:redColor mode:MCSwipeTableViewCellModeSwitch state:MCSwipeTableViewCellState2 completionBlock:^(MCSwipeTableViewCell *cell, MCSwipeTableViewCellState state, MCSwipeTableViewCellMode mode) {
self.indexPathToDelete = [tableView indexPathForCell:cell];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Delete?"
message:@"Are you sure your want to remove this checkin?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alertView show];
}];
}
然后在UIAlertView
委托方法中:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
// No
if (buttonIndex == 0) {
}
// Yes
else {
PLOTCheckinTableViewCell *cell = (PLOTCheckinTableViewCell *)[self.checkinsTableView cellForRowAtIndexPath:self.indexPathToDelete];
[self.checkins removeObjectAtIndex:self.indexPathToDelete.row];
[self.checkinsTableView deleteRowsAtIndexPaths:@[self.indexPathToDelete] withRowAnimation:UITableViewRowAnimationFade];
self.indexPathToDelete = nil;
}
}
但是,每当我在警报视图中点击“确定”时,被删除的单元格始终是tableview中的最后一个单元格,即。不是用户实际刷过的单元格。
是否与出局有关?
答案 0 :(得分:1)
是。您不应该引用您的单元格。相反,尝试引用导致单元格存在的实际对象(即,如果这是消息列表,则显示在该单元格内的消息)。
正在重用单元对象,UIAlertView不会知道这一点。即使您的列表中有1000个项目,也不会超过20个单元格。它们总是会在您的表格视图滚动中重复使用。
您应该考虑从数据源数组中删除元素,而不是删除单元格本身。删除元素后,您始终可以重新加载表视图,以直观地反映元素删除状态。