操作表UIButton处理删除

时间:2013-07-23 15:33:10

标签: ios objective-c tableview cell uibarbuttonitem

我有一个UITableView,我从UIWebView下载了文件。在我的更改之前,删除行以及从中下载行的本地文件夹没有问题。

从那时起,我实现了一个多选功能。按编辑,选择w / e文件,按删除显示操作表正常。但对于我的生活,我无法弄清楚如何使行动表处理删除行动。

下面我将发布我正在使用的代码。

//viewDidLoad:
self.deleteButton = [[UIBarButtonItem alloc] initWithTitle:@"Delete" style:UIBarButtonItemStyleBordered target:self action:@selector(deleteButton:)];

- (void)deleteButton:(id)sender
{
    NSString *actionTitle = ([[self.tableView indexPathsForSelectedRows] count] == 1) ?
    @"Are you sure you want to remove this item?" : @"Are you sure you want to remove these items?";
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:actionTitle delegate:self cancelButtonTitle:@"Cancel"
                                               destructiveButtonTitle:@"OK" otherButtonTitles:nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [actionSheet showInView:self.view];

}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete){

        NSString *fileName = [directoryContents objectAtIndex:indexPath.row];

        NSString *path;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"downloads"];
        path = [path stringByAppendingPathComponent:fileName];
        NSError *error;

    //Remove cell
        [directoryContents removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        //[tableView reloadData];

        if ([[NSFileManager defaultManager] fileExistsAtPath:path])     //Does file exist?
        {
            if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error])   //Delete it
            {
                NSLog(@"Delete file error: %@", error);
            }
        }
    }
}

有关如何链接“确定”按钮以完成删除的任何信息将非常感激。

2 个答案:

答案 0 :(得分:1)

您必须实现UIActionSheet委托方法

actionSheet:didDismissWithButtonIndex:

将完美运作

修改

在UIActionSheet委托方法中添加setEditing:YES只会将tableView置于编辑模式,而不是提交删除。我不知道如何检索要删除的行,但编辑模式只允许选择一行。

我认为你想要完成的事情可能更好的是操纵你的didSelectRowAtIndexPath方法来标记每一行的删除,并将选定的索引添加到数组中,或者用勾选标记来标记行。 / p>

然后在UIActionSheet委托方法中,当用户点击“确定”时,放置删除逻辑,使用indices数组或遍历单元格以查找您选择删除的那些。

我会尝试这样做,因为正如您所经历的那样,自定义删除按钮和commitEditingStyle协议方法难以链接,因为调用此方法的方式。

答案 1 :(得分:0)

 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
      if (buttonIndex == actionSheet.destructiveButtonIndex) 
      {
              //Delete
              [yourCell setEditing:YES animated:YES];

      }
}