我想要类似于闹钟应用程序的东西,你不能滑动删除行,但你仍然可以删除编辑模式中的行 .
当注释掉tableView:commitEditingStyle:forRowAtIndexPath:时,我禁止滑动删除并在编辑模式下仍然有删除按钮,但是当我按下删除按钮时会发生什么 . 叫什么?
好吧,结果很简单 . 这就是我为解决这个问题所做的:
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: ,否则不会启用滑动到删除 .
当我在开发中时,我没有实现它,因此没有启用滑动到删除 . 当然,在完成的应用程序中,它将始终实现,因为否则将不会进行编辑 .
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应用程序的实现方式 .
On C#:
我有同样的问题,需要在滑动时使用删除选项启用/禁用行 . 需要向左滑动多行并将其删除,并将其保留为其他颜色 . 我实现了使用这个逻辑 .
[Export("tableView:canEditRowAtIndexPath:")] public bool CanEditRow(UITableView tableView, NSIndexPath indexPath) { if (deletedIndexes.Contains(indexPath.Row)){ return false; } else{ return true; } }
请注意,deletedIndexes是从表中删除而没有重复的索引列表 . 此代码检查是否删除了一行,然后禁用了滑动,反之亦然 .
等效的委托函数是Swift是 canEditRowAtIndexPath .
canEditRowAtIndexPath
5 回答
好吧,结果很简单 . 这就是我为解决这个问题所做的:
Objective-C
Swift 2
Swift 3
您仍然需要实现
tableView:commitEditingStyle:forRowAtIndexPath:
来提交删除 .为了清楚起见,除非实施
tableView:commitEditingStyle:forRowAtIndexPath:
,否则不会启用滑动到删除 .当我在开发中时,我没有实现它,因此没有启用滑动到删除 . 当然,在完成的应用程序中,它将始终实现,因为否则将不会进行编辑 .
Swift版本:
基本上,您可以使用这些方法启用或禁用编辑
如果启用了编辑,则会显示红色删除图标,并向用户请求删除确认 . 如果用户确认了委托方法
被通知删除请求 . 如果您实现此方法,则滑动到删除将自动激活 . 如果未实现此方法,则滑动到删除不活动,但是您无法实际删除该行 . 因此,据我所知,除非使用一些未记录的私有API,否则无法实现您的要求 . 可能这就是Apple应用程序的实现方式 .
On C#:
我有同样的问题,需要在滑动时使用删除选项启用/禁用行 . 需要向左滑动多行并将其删除,并将其保留为其他颜色 . 我实现了使用这个逻辑 .
请注意,deletedIndexes是从表中删除而没有重复的索引列表 . 此代码检查是否删除了一行,然后禁用了滑动,反之亦然 .
等效的委托函数是Swift是
canEditRowAtIndexPath
.