UITableView禁用滑动删除,但仍然有编辑模式下删除?

我想要一些类似于“报警”应用程序的地方,在那里你不能轻扫删除行,但是你仍然可以在编辑模式下删除行。

当注释掉tableView:commitEditingStyle:forRowAtIndexPath:时,我禁用了滑动删除function,在编辑模式下仍然有删除button,但按下删除button时会发生什么情况。 叫什么?

好的,事情很简单。 这是我做的解决这个问题的方法:

Objective-C的

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { // Detemine if it's in editing mode if (self.tableView.editing) { return UITableViewCellEditingStyleDelete; } return UITableViewCellEditingStyleNone; } 

Swift 2

 override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { if tableView.editing { return .Delete } return .None } 

Swift 3

 override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { if tableView.isEditing { return .delete } return .none } 

你仍然需要实现tableView:commitEditingStyle:forRowAtIndexPath:提交删除。

为了清楚tableView:commitEditingStyle:forRowAtIndexPath:除非tableView:commitEditingStyle:forRowAtIndexPath:被实现,否则不会启用滑动删除。

在开发过程中,我没有实现它,因此没有启用“滑动删除”function。 当然,在一个完成的应用程序,它总是会被执行,因为否则就不会有编辑。

Swift版本:

 override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { if(do something){ return UITableViewCellEditingStyle.Delete or UITableViewCellEditingStyle.Insert } return UITableViewCellEditingStyle.None } 

基本上,您可以使用这些方法启用或禁用编辑

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

如果启用了编辑,将出现红色删除图标,并向用户请求删除构造。 如果用户确认,委托方法

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

被通知删除请求。 如果你实现这个方法,那么滑动删除就会自动激活。 如果你没有实现这个方法,那么滑动删除不是有效的,但是你不能实际删除该行。 因此,据我所知,除非使用一些未公开的私有API,否则无法实现所要求的内容。 可能这就是Apple应用程序的实现方式。