1

我有一个UITableViewController, 设置,以便用户可以删除行。这是我的删除操作处理程序的代码,以及以下的委托方法UIAlertView

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"t" message:@"del?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Delete", nil];
        [alert show];
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    if (buttonIndex != [alertView cancelButtonIndex]) {
        //my code to delete from the data source is here. it works fine.
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationFade];
    }
}

问题出在最后一行,它应该从tableView. 如果我把它(以及从数据源中删除的代码)放在第一个方法而不是UIAlertView东西中,它就可以正常工作。

这样做的正确方法是什么?

4

1 回答 1

1

问题是该UIIndexPath方法中的对象是错误的!我猜这是因为在显示警报视图时没有选择行。所以,我在UIAlertView编写代码之前将它保存到视图控制器类的属性中,稍后在第二种方法中检索它,它工作正常。

于 2012-04-20T21:29:23.120 回答