Swift - tableView中的可移动行仅在一个部分内,而不是在一个部分之间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift - tableView中的可移动行仅在一个部分内,而不是在一个部分之间相关的知识,希望对你有一定的参考价值。
有没有办法防止tableView中的单元格被移动到不同的部分?
sections
具有不同类型单元格的数据,因此当用户尝试将单元格拖动到不同的部分时,应用程序崩溃。
我想只允许用户移动部分内的单元格,而不是在部分之间。
相关代码如下:
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let reorderedRow = self.sections[sourceIndexPath.section].rows.remove(at: sourceIndexPath.row)
self.sections[destinationIndexPath.section].rows.insert(reorderedRow, at: destinationIndexPath.row)
self.sortedSections.insert(sourceIndexPath.section)
self.sortedSections.insert(destinationIndexPath.section)
}
答案
你需要实现UITableViewDelegate
方法targetIndexPathForMoveFromRowAt
。
如果源和目标section
相同,您的策略是允许移动。如果不是那么你可以返回第0行,如果建议的目标部分小于源部分,或者如果建议的目标部分大于源部分,则返回部分的最后一行。
这将限制移动到源部分。
override func tableview(_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {
let sourceSection = sourceIndexPath.section
let destSection = proposedDestinationIndexPath.section
if destSection < sourceSection {
return IndexPath(row: 0, section: sourceSection)
} else if destSection > sourceSection {
return IndexPath(row: self.tableView(tableView, numberOfRowsInSection:sourceSection)-1, section: sourceSection)
}
return proposedDestinationIndexPath
}
另一答案
查看此Apple doc链接
你需要管理条件
targetIndexPathForMoveFromRowAtIndexPath
可以MoveRowAtIndexPath
以上是关于Swift - tableView中的可移动行仅在一个部分内,而不是在一个部分之间的主要内容,如果未能解决你的问题,请参考以下文章
Swift - tableView 行高仅在滚动或切换展开/折叠后更新
一个 UIView Swift 中的多个 TableViews - 如何同时显示
Swift 中的 UITableView 无法识别 UINavigationBar,填充已关闭,部分 tableview 被隐藏