将Table更改为Edit模式并删除普通ViewController中的行

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

我只是看了很多其他的post,但找不到合适的解决scheme。

我试图为表中的每一行插入一个断言button:

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 

我甚至发现按下附件button时会调用的方法:

 - (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的屏幕截图。 我还没有集成一个navigationController。

在这里输入图像说明

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

 [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]; } } 

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

我可以解决删除行的问题。 为了使它工作,我插入像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上find了这个解决scheme

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

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

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