如果我在表视图行上滑动以删除它,那么该行不会被视为一个完整的实体 - 我的意思是单元格的编辑操作部分总是通过向上滑动来解散自身,但是其余的单元格根据为UITableViewRowAnimation设置的任何值来解散自己。
因此,例如,如果使用deleteRows(... .left)
删除下面的行,则该行的白色部分将滑到屏幕的左侧,但UNBLOCK部分会单独运行 - 它总是在屏幕上滑动,而不管deleteRows中使用的UITableViewRowAnimation值。
代码如下:
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction = UITableViewRowAction(style: .default, title: "UNBLOCK") { action, index in
self.lastSelectedRow = indexPath
let callerToUnblock = self.blockedList[indexPath.row]
self.unblockCaller(caller: callerToUnblock)
}
deleteAction.backgroundColor = UIColor.tableViewRowDeleteColor()
return [deleteAction]
}
func unblockCaller(caller:Caller) {
DispatchQueue.global(qos: .background).async {
Model.singleton().unblockCaller(caller) {(error, returnedCaller) -> Void in
if error == nil {
DispatchQueue.main.async {
if let lastSelectedRow = self.lastSelectedRow {
self.tableView.deleteRows(at: [lastSelectedRow], with: .left)
}
}
...
有人知道如何让整行一致地移动吗?
答案 0 :(得分:0)
正确。这两个对象表现为单独的实体。您无法控制UITableViewRowAction
按钮在UITableViewCell
框架之外绘制的动画。
请参阅此捕获的视图层次结构中的UITableViewCellDeleteConfirmationView
布局。 (请注意蓝色中的UITableViewCell
框架如何不包含红色中的UITableViewCellDeleteConfirmationView
:
在删除单元格之前隐藏编辑按钮。它将在细胞删除动画之前被删除,然后其余细胞向上滚动。
func unblockCaller(caller:Caller, indexPath:IndexPath) {
// Perform the deletion
// For example: self.blockedList.remove(at: indexPath.row)
// if error == nil...
DispatchQueue.main.async {
self.tableView.setEditing(false, animated: false)
self.tableView.deleteRows(at: [indexPath], with: .left)
}
}
self.lastSelectedRow = indexPath
)。将路径传递给worker方法,以便更好地隔离任务。style: .destructive
并避免使用自定义颜色方案。 editActionsForRowAt
成为单行:self.unblockCaller(caller: self.blockedList[indexPath.row], indexPath: indexPath)