我想删除一个表视图单元格,但在该操作发生之前,我想给用户一个警报视图.我懂了:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Are you sure?" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES",nil]; [alert show]; [self.array removeObjectAtIndex:indexPath.row];//or something similar to this based on your data source array structure [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; if([title isEqualToString:@"Nee"]) { NSLog(@"Nothing to do here"); } else if([title isEqualToString:@"Ja"]) { NSLog(@"Delete the cell"); } }
但是现在当我在单元格上向右滑动并且删除按钮出现时,我没有AlertView.当我按下删除按钮时,我只获得AlertView.当我按下删除按钮时,会出现消息,但单元格已被删除.
如何使这项工作?所以当我滑动时有一个AlertView.
关于序列,一切都很好.只有在按下删除按钮时才会调用commitEditingStyle.关键是你实际上在响应警报之前删除了对象.把它改成这个:
@interface PutYourViewControllerClassNameHere @property (strong,nonatomic) NSIndexPath *indexPathToBeDeleted; @end
然后:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { self.indexPathToBeDeleted = indexPath; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Are you sure?" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES",nil]; [alert show]; // do not delete it here. So far the alter has not even been shown yet. It will not been shown to the user before this current method is finished. } } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // This method is invoked in response to the user's action. The altert view is about to disappear (or has been disappeard already - I am not sure) NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; if([title isEqualToString:@"NO"]) { NSLog(@"Nothing to do here"); } else if([title isEqualToString:@"YES"]) { NSLog(@"Delete the cell"); [self.array removeObjectAtIndex:[self.indexPathToBeDeleted row]]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:self.indexPathToBeDeleted] withRowAnimation:UITableViewRowAnimationFade]; } }