2013-07-23 1 views
0

У меня есть UITableView, в котором у меня загружены файлы из UIWebView. До моих изменений у меня не было проблем с удалением строки и из локальной папки, в которую она была загружена.Лист действия UIButton для обработки delete

С тех пор я реализовал функцию множественного выбора. Нажатие на редактирование, выбор 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); 
      } 
     } 
    } 
} 

Любая информация о том, как связать эту кнопку «ОК», чтобы закончить удаление, была бы весьма признательна.

ответ

1

Вы должны реализовать методы UIActionSheet Делегирование

actionSheet:didDismissWithButtonIndex: 

будет работать отлично

EDIT

Добавление setEditing:YES внутри метода делегата UIActionSheet только поместить Tableview в режим редактирования, не предании удаление. Я не знаю, как вы извлекаете строки, которые хотите удалить, но режим редактирования позволяет выбирать только одну строку.

Я думаю, что может быть лучше для того, что вы хотите выполнить, манипулируя вашим методом didSelectRowAtIndexPath, чтобы отметить каждую строку для удаления, и либо добавить выбранные индексы в массив, либо пометить строки с помощью галочки.

Затем в методе делегата UIActionSheet, когда пользователи нажимают «ОК», поместите логику удаления, либо используйте массив индексов, либо итерайте по ячейкам, чтобы найти те, которые вы выбрали для удаления.

Я бы попробовал это, потому что, как вы уже испытали, пользовательская кнопка удаления и метод протокола commitEditingStyle трудно связать из-за того, как вызывается этот метод.

+0

У меня нет проблем со списком действий, как указано, что часть работает нормально. Он связывает кнопку листа действия с commitEditingStyle, чтобы завершить процесс удаления. – ChrisOSX

+0

Я бы выполнил ваше удаление внутри метода делегата actionSheet, а затем перезагрузил tableView. –

+0

Я считаю, что мне просто нужен способ вызвать идентификатор deleteButton внутри commitEditingStyle, как ответ выше вашего. – ChrisOSX

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

     } 
} 
+0

@ChrisOSX Это сработало? –

+0

Мне пришлось идти на работу, прежде чем я смог проверить. Я буду тестировать позже и отчитываться. – ChrisOSX

+0

Хорошо, только что вернулся домой и попробовал, мне не кажется, что мне удалось связать идентификатор deleteButton с commitEditingStyle. – ChrisOSX

Смежные вопросы