以编程方式调用 tableView 单元格的 .delete editingStyle
Posted
技术标签:
【中文标题】以编程方式调用 tableView 单元格的 .delete editingStyle【英文标题】:Programmatically call a tableView cell's .delete editingStyle 【发布时间】:2018-12-09 22:25:46 【问题描述】:我找到了一种通过使用delegate
方法以编程方式在我的 tableView 中选择一行的方法,就像这个答案中建议的那样:
https://***.com/a/40589905/3511695
现在我的每个 tableView 的单元格都有一个 .delete
editingStyle
选项:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
if (editingStyle == .delete)
// code that's called when user presses delete button
我如何以编程方式调用这个delete
函数?即模拟用户按下delete
按钮? (就像我能够以编程方式模拟按下 tableView 单元格一样)
我的if (editingStyle == .delete)
中有一个alertController
,我需要再次显示它,这就是为什么我需要以编程方式模拟用户按下 UI 中的“删除”按钮,而不是简单地删除该行。
【问题讨论】:
真正的答案是。不要这样做。您有一个要更新的模型。当你更新模型时,视图控制器应该自动更新视图。不要将您的视图视为模型。使用 MVC 或其他架构并正确划分代码。 【参考方案1】:您要查找的不是UITableViewDelegate
方法,而是UITableViewDataSource
方法。
这不是最好的解决方案,但如果您真的想这样做,请在 TableView 的 dataSource
上调用此方法,并作为参数传递您的 TableView,editingStyle 为.delete
和某些IndexPath
tableView.dataSource?.tableView!(tableView, commit: .delete, forRowAt: indexPath)
现在你应该做什么:
你应该把commit
数据源方法中if语句的代码放到新方法中,然后你应该在这里调用这个方法
if (editingStyle == .delete)
method()
而不是调用tableView.dataSource?...
method()
【讨论】:
我的if (editingStyle == .delete)
中已经有该代码。那只是删除行。我想模拟用户按下delete
按钮。 (当用户按下delete
按钮时,我的代码中完成了更多操作,而不仅仅是删除行。)
@velkoon 是的,所以只需调用我上面写的内容
我的if (editingStyle == .delete)
中出现了一个警报控制器,如果我只是执行yourTableView.deleteRows(at: [someIndexPath], with: .automatic)
,它就不会出现。我需要 if (editingStyle == .delete)
以编程方式执行,这样我的 alertController 才会出现。
完美!我还有一些故障排除要做,但这正是我需要的,谢谢
不要这样做。永远不要直接调用委托或数据源方法。如果你认为这是正确的,那你就错了。以上是关于以编程方式调用 tableView 单元格的 .delete editingStyle的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将不同单元格的不同图像添加到 tableView (Swift 3)
如何以编程方式将约束添加到 tableView 单元格的默认 textLabel 和 accessoryView
如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 TableView 中单元格的高度?