4

我只是将一个表插入到一个普通的 UIViewController 中,并将委托和源组件与文件的所有者连接起来。当我将数据插入表行时,一切正常。但现在我试图找出如何删除行。

我只是看了很多其他帖子,但找不到正确的解决方案。

我试图为表中的每一行插入一个 asseccory 按钮:

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

我什至找到了按下附件按钮时将调用的方法:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Accessory pressed");

    //[self tableView:tableView willBeginEditingRowAtIndexPath:indexPath];

    //[self tableView:nil canEditRowAtIndexPath:indexPath];
    //[self setEditing:YES animated:YES];
}

在日志中打印了消息,但是我尝试调用的任何一种方法(注释的方法)都没有将视图更改为编辑模式。我怎么解决这个问题?


这是 UIViewController 的屏幕截图。我还没有集成导航控制器。

在此处输入图像描述

4

2 回答 2

10

为了启用表格视图的编辑模式,您可以在UITableViewas 上调用编辑方法,

[self.tableView setEditing:YES animated:YES];

您必须实现tableView:commitEditingStyle:forRowAtIndexPath:方法来启用行的删除。为了删除您需要使用deleteRowsAtIndexPaths:withRowAnimation:方法的行。

例如:-

self.navigationItem.rightBarButtonItem = self.editButtonItem;//set in viewDidLoad

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { //Implement this method
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { //implement the delegate method

  if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Update data source array here, something like [array removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  }   
}

有关更多详细信息,请查看此处的苹果文档

于 2013-01-03T22:43:47.257 回答
1

我可以解决删除行的问题。为了使它工作,我像 ACB 告诉我的那样插入了以下方法:

//when blue accessory button has been pressed
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    //turn into edit mode
    [tableView setEditing:YES animated:YES];    
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{

    [super setEditing:editing animated:animated];    
}

// method to enable the deleting of rows
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        Activity *activity = [allActivities objectAtIndex:indexPath.row];

        // remove the item from the array
        [allActivities removeObjectAtIndex:indexPath.row];

        //delete element from database with created method
        [dataController deleteFromTable:@"activity" theElementWithID:activity._id];

        [tableView setEditing:NO animated:YES];

        // refresh the table view
        [tableView reloadData];
    }

}

我在cocoapi.wordpress.com/tag/caneditrowatindexpath上找到了这个解决方案

但我仍然只有一个问题。如果有人进入编辑模式,并且不会删除一行,则不可能再次关闭编辑模式。如果您切换视图并再次返回,它会自动停止,但否则它不可能,因为我没有插入 NavigationController。

有没有办法在编辑时访问行左侧的删除控件的状态?检测是否有人再次关闭删除以跳出编辑模式将很有用。

它可能不适合苹果用户指南,但我只是在我的第一个项目中,它应该可以工作。

于 2013-01-05T12:19:57.917 回答