如何重新排序 UITableView 的各个部分?
Posted
技术标签:
【中文标题】如何重新排序 UITableView 的各个部分?【英文标题】:How to reorder sections of a UITableView? 【发布时间】:2018-10-27 19:11:54 【问题描述】:This question from 2009 没有得到答复,这是互联网上极少数提及此问题的问题之一。
问题:我想重新排序 UITableView 的各个部分,就像我对行所做的一样(即,通过拖动)。
我看到这个工作的方式是:您打开表格上的编辑,重新排序指示器出现。当您开始拖动节标题(或充当伪节标题的单元格,这是次优 [1])时,所有常规单元格“消失”,因此您只能移动节(如果您更容易有多个部分)。
LPRTableView 似乎解决了这个问题,但是在重新排序部分时正确设置是相当棘手的。我尝试了一整天,但没有很成功。另外,[1]。
一个不太好但可以接受的解决方案是在标题中添加⬆️⬇️之类的按钮(此处可以使用正确的标题),但这有点尴尬。
另一个不太好但可以接受的解决方案是有一个额外的步骤(比如一个按钮),它会打开一个新的 UITableView,只将部分显示为单元格,并允许在那里重新排序。工作正常,但产生的问题多于解决的问题 [2]。
我在the docs 中看不到任何内容,例如,在重新排序开始/结束时调用的挂钩。或者更确切地说,有ending 位,但我看不到开头的位。
建议?
[1] 原则上,这允许将行放置在节标题之前,您必须手动捕捉它,视觉效果不好。
[2] 我什至会在哪里放置这样的控件,尤其是如果我的 UI 已经很拥挤,或者我想保持我的 UI 最小化?
【问题讨论】:
可能相关:***.com/questions/24564810/… 我看到了,但它不允许我将单元格从一个部分移动到另一个部分。 你试过 func moveSection(_ section: Int, toSection newSection: Int) 吗? 可以,但是无法拖放这些部分。如果我有向上和向下按钮,那么我会在 之后使用该功能。 UITableView 控件没有提供“内置”标准方法来执行此操作,因此您需要自己手工制作。查看@AhmadF 提供的链接,您可以尝试使用点击手势或平移手势来启动和控制部分的移动。 【参考方案1】:我会折叠所有部分并仅将 sectionHeaders 显示为 UITableViewCells。然后我会用默认的拖放行为重新排列它们。完成后,将旧的未折叠信息加载回表格视图单元格。
那么您就不必考虑动画并遵守“ios 指南”。
【讨论】:
我正在考虑这样做,但问题仍然是我如何触发该功能。它必须易于发现(即,不要长时间点击标题或其他晦涩的手势),并且不能使 UI 混乱(排除某处的按钮)。 可能有披露指示符,但在部分标题中指向上方?或者只是一个编辑栏按钮项目会更容易。【参考方案2】:借助假截面,您可以点击并拖动该截面视图。有两个步骤:
-
首先让委托识别 uitableview 的哪个部分是
在你点击下(我希望你能做到这一点,我不会进入
详情)。
而不是将其放到必须替换的部分。因此对于 替换我脑子里也有两个想法。
首先播放视图 层次结构 顶部是什么,下面是什么,而不是借助标记或 别的东西得到你下面的部分替换假部分。
第二个可能是找到可见单元格而不是计算 屏幕位置可能是这里的部分。
当您可以实现这一点时,您拥有这两个部分,您可以在数据源中替换这两个部分,然后再次加载数据。
【讨论】:
这就是 LPRTableView 所做的。我试过了,但是设置部分非常棘手(请参阅我的 OP 中提到的)。 不要使用 LPRTableView 你可以自己做它不是我认为的那么棘手。如果您对 tableview 不是那么好,那可能是个问题。让我看看 LPRTableView,如果我找到了我会回复你的。以上是关于如何重新排序 UITableView 的各个部分?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用删除按钮在 UITableView 中显示重新排序控件
如何制作像 UITableView 一样的动画重新排序单元格?