gpt4 book ai didi

swift - 具有破坏性风格的 UIContextualAction 似乎默认删除行

转载 作者:行者123 更新时间:2023-12-03 16:32:05 25 4
gpt4 key购买 nike

我看到的问题是,当我创建 UIContextualAction 时与 .destructive truecompletionHandler似乎有删除行的默认操作。

如果您从 Xcode 的模板创建一个新的 Master-Detail App 并将此代码添加到 MasterViewController ...

override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let testAction = UIContextualAction(style: .destructive, title: "Test") { (_, _, completionHandler) in
print("test")
completionHandler(true)
}
return UISwipeActionsConfiguration(actions: [testAction])
}

您滑动的行将被删除。请注意,那里没有更新表 View 的代码。此外,模型不会更新,如果向上滚动以重新加载该行,它将重新出现。

路过 false在这种情况下不会删除该行。或使用 .normal风格和 true也不会删除该行。
.destructivetrue导致默认情况下删除该行。

谁能解释这种行为?为什么要删除该行?

最佳答案

根据破坏性选项的文档:

An action that deletes data or performs some type of destructive task.



完成意味着该操作是否成功。传递 true 意味着破坏性任务成功,因此应删除该行。

您打算在发生破坏性操作时手动更新数据源,否则会导致滚动以使数据重新出现。您还需要告诉 tableView 数据已被删除。

下面是一些显示工作示例的代码:
UIContextualAction(style: .destructive, title: "Delete") { [weak self] (_, _, completion) in
if self?.canDelete(indexPath) { // We can actually delete
// remove the object from the data source
self?.myData.remove(at: indexPath.row)
// delete the row. Without deleting the row or reloading the
// tableview, the index will be off in future swipes
self?.tableView?.deleteRows(at: [indexPath], with: .none)
// Let the action know it was a success. In this case the
// tableview will animate the cell removal with the swipe
completion(true)
} else { // We can't delete for some reason
// This resets the swipe state and nothing is removed from
// the screen visually.
completion(false)
}
}

然后我需要重新加载 tableview或调用 deleteRows为了拥有 indexPath在下一次滑动时正确计算。

如果我有 10 行并且我滑动第 5 行来删除,那么之后的每一行都会被关闭一行,除非 tableview重新加载或 tableview被告知该行以某种方式被删除。

关于swift - 具有破坏性风格的 UIContextualAction 似乎默认删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com