将UITableViewCell恢复为正常编辑模式

时间:2012-05-05 15:39:15

标签: ios user-interface uitableview editing

当用户决定删除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,因为我希望表保持正常的编辑状态。有什么想法吗?

编辑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];
}

4 个答案:

答案 0 :(得分:1)

在此之后,你也可以提出一个AlertView,询问他们是否真的,真的,真的想要删除。

打开按钮然后按删除的两步过程应该是充分的确认。

做你正在做的事情在我看来并不是标准做法,一旦你进入那个领域,你就会在框架中找到漏洞。

答案 1 :(得分:1)

我同意上述讨论,需要删除3次是一个坏主意。

但是,对于其他操作,可能有充分的理由重置行。最简单的解决方案就是重新加载一行。

Swift 2.2:

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

答案 2 :(得分: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.
        }   
    }

答案 3 :(得分:0)

只需退出编辑模式(Swift):

tableView.setEditing(false, animated: true)