2012-05-05 2 views
4

У меня есть второй диалог подтверждения, который появляется, когда пользователь решает удалить UITableViewCell. Вот мой взгляд таблицы в нормальном состоянии:Возврат UITableViewCell в обычный режим редактирования

Normal


А вот когда вся таблица переходит в режим редактирования:

Normal editing mode


Теперь, когда пользователь кранит один из красных знаков минус слева, ячейка переходит в режим подтверждения удаления:

Delete confirmation mode


Если пользователь вводит кнопку удаления, которая только появилась, кажется это действие листа:

Second confirmation


Здесь возникает проблема. Если пользователь подтверждает, что хочет удалить карту, все хорошо. Но если кнопка отмены нажата, лист действия исчезает, но вид таблицы по-прежнему выглядит следующим образом:

The delete confirmation button should no longer be in its selected state, and should have hidden itself from view

Вопрос заключается в том, что кнопка подтверждения удаления больше не должно быть в выбранном состоянии, и должна скрылись от зрения. Как видите, это не так. Мои поиски в документации закончились безрезультатно. Я не хочу setEditing:NO, потому что я хочу, чтобы таблица оставалась в нормальном состоянии редактирования. Есть идеи?

Edit 1: Вот что происходит внутри tableView:commitEditingStyle:forRowAtIndexPath:

- (void)tableView:(UITableView*)tableView commitEditingStyle: 
    (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath { 
    NSInteger finalIndex = [self getFinalIndexForIndexPath:indexPath]; 

    NSString* mapTitle = ((PreviewDataObject*)[[[SingletonDataController sharedSingleton] 
     getImportedOrSavedMapPreviews:masterIdentifierString] 
     objectAtIndex:finalIndex]).titleString; 

    UIActionSheetWithIndexPath* sheet = [[UIActionSheetWithIndexPath alloc] initWithTitle: 
     [NSString stringWithFormat:@"Are you sure you want to delete the map '%@'?", 
     mapTitle] delegate:self cancelButtonTitle:@"Cancel" 
     destructiveButtonTitle:@"Delete Map" otherButtonTitles:nil]; 
    sheet.indexPath = indexPath; 
    [sheet showFromTabBar:[AppDelegate appDelegate].tabBarController.tabBar]; 
    [sheet release]; 
} 
+0

может у показать код - (пустоте) Tableview: (UITableView *) Tableview commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath :(NSIndexPath *) indexPath –

+0

Не могли бы вы рассказать нам, что это за ваше имя массива? – vishiphone

+0

В 'commitEditingStyle', я фактически не делаю удаления; Я просто представляю лист действий, который подсказывает пользователю, действительно ли он * хочет удалить карту. –

ответ

1

После этого вы также можете представить AlertView с вопросом, действительно ли они действительно хотят удалить.

Двухэтапный процесс включения кнопки и последующего нажатия на удаление должен быть достаточным для подтверждения.

Выполнение того, что вы делаете, не кажется мне обычной практикой, и как только вы попадете в эту область, вы найдете дыры в рамках.

+0

Я полагаю, вы, вероятно, правы, хотя я все еще хочу, чтобы был способ сделать то, что я хочу. –

+0

Я думаю, что то, что @ eric.mitchell пыталось выполнить, было разумным. Тем не менее, этот ответ заставил меня смеяться :). Есть простой способ выполнить то, что вы просите, пожалуйста, см. Мой ответ. Еще 4 года, хотя ... – oyalhi

0

Просто попробуйте это и скажите мне его работать для вас или нет.

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     if (editingStyle == UITableViewCellEditingStyleDelete) 
     { 
      // Delete the row from the data source. 

      [arr removeObjectAtIndex:indexPath.row]; 


      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     else if (editingStyle == UITableViewCellEditingStyleInsert) 
     { 
      // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
     } 
    } 
1

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

Однако для других действий может быть веской причиной для сброса строки. Самое простое решение - это просто перезагрузка одной строки.

Swift 2.2:

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
0

Просто выйти из режима редактирования (Swift):

tableView.setEditing(false, animated: true) 
Смежные вопросы