我有一个UITableView
,核心数据和NSFetchedResultsController
填充了单元格。我的自定义单元格上有一个自定义按钮,我打算用它来删除单元格。添加标准滑动到删除非常容易,但我宁愿使用此自定义按钮。有谁知道如何将一个动作连接到按钮,该按钮将从数据模型中删除条目并从UITableView
删除单元格?对于我的生活,我找不到一个好的解决方案。
编辑:
这是我必须使用标准滑动删除来删除它的代码。我可以用任何方式修改它以使用按钮吗?
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates];
// Delete the task
Task *taskToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting (%@)", taskToDelete.name);
[self.managedObjectContext deleteObject:taskToDelete];
[self.managedObjectContext save:nil];
// Delete the row
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self performFetch];
[self.tableView endUpdates];
}
答案 0 :(得分:7)
概述:
deleteRow:(id)sender
; sender
将是按钮。获取其superview,然后是superview的superview,依此类推,直到你有了对UITableViewCell的引用。 (使用isKindOfClass:
循环搜索,不要认为按钮只有1,2,3级。)indexPathForCell:
方法,将单元格引用转换为索引路径。objectAtIndexPath:
来获取对象。然后删除它!如果您正在处理NSFetchedResultsController委托方法,他们将负责删除已删除的行。
示例代码(在没有编译器的情况下输入以进行检查):
- (void)deleteRow:(id)sender
{
id view = [sender superview];
while (view && ![view isKindOfClass:[UITableViewCell class]]) {
view = [view superview];
}
UITableViewCell *cell = view;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSManagedObject *task = [fetchedResultsController objectAtIndexPath:indexPath];
[self.managedObjectContext deleteObject:task];
[self.managedObjectContext save:nil];
}
就是这样。请勿尝试从表格视图中删除该行。当删除对象时,NSFetchedResultsController将检测更改并更新表视图,假设您按照NSFetchedResultsController文档中的描述设置委托方法。如果还没有,请阅读文档(只需双击Xcode中的“NSFetchedResultsController”)。