iOS UICollectionView拖动排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS UICollectionView拖动排序相关的知识,希望对你有一定的参考价值。

参考技术A 效果图如下:

2.1 通过长按操作找到需要被拖动的cell1
2.2 通过拖动cell1找到找到和它交换位置的cell2
2.3 交换cell1和cell2的位置
2.4 替换数据源,把起始位置的数据模型删除,然后将起始位置的数据模型插入到拖拽位置

如何在 Swift 4 中为 UICollectionView 的部分设置最大元素数?

【中文标题】如何在 Swift 4 中为 UICollectionView 的部分设置最大元素数?【英文标题】:How to set a max number of elements for sections of a UICollectionView in Swift 4? 【发布时间】:2018-06-08 23:10:13 【问题描述】:

我正在创建一个具有重新排序功能的 UICollectionView。有点像this。

我想限制集合视图每个部分的元素数量并更改“排序动画”(当元素拖动时)。

例如: 您有一个包含 3 个部分(A、B 和 C)的集合视图。 这 3 个部分具有最大元素数。 您将一个元素从 B 部分移动到 A 部分。 A节的最后一个元素应该移动到B节,而不是增加A节的元素个数。

知道如何实现这个功能吗?

【问题讨论】:

让别人为你写代码并不是 *** 的真正目的。到目前为止,您尝试过什么?发布一些代码,以便我们查看您在哪里遇到问题... 【参考方案1】:

如果是其他条件,则可以执行某些条件,并且一个部分中的当前项目数组,如果 items.count 高于允许的最大值,请检查下一部分的项目数量,如果低于则 max 将其放在那里。

您可能想尝试一些类似这样的扩展:

https://github.com/michel-moreau/DraggableCollectionView

https://github.com/lognllc/DraggableCollectionView

https://github.com/liangdahong/BMDragCellCollectionView

https://github.com/Instagram/IGListKit

请务必下载并演示他们的代码,这可能是您正在寻找的。​​p>

【讨论】:

所以没有办法通过重写方法或者在 CollectionView 中设置参数来实现这种行为吧? 没有以编程方式检查您是否没有超过 maxcount 集编号。虽然您可能能够以 3rd 方库的形式找到扩展【参考方案2】:

您为什么不尝试使用一个功能来查看所有三个部分,查看哪些部分有太多项目,然后移动它们。然后...当返回每个集合视图中的项目数时,当它超过每个部分的最大元素数时调用该函数。如果您需要澄清,请告诉我。

func collectionView(.....numberOfItemsOrRows?...)
    if (newArrayCountForList1 > maxElements)
        redistributeArrayValues()
      // copy the above if statement with function inside for the next 2 arrays
 (Assuming each section has an array representing elements in that section)

【讨论】:

以上是关于iOS UICollectionView拖动排序的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 单元格的水平重新排序

iOS 利用UICollectionView拖拽排序 实现的仿照腾讯新闻频道管理功能 XLChannelControl

如何在 Swift 4 中为 UICollectionView 的部分设置最大元素数?

如何禁用 UICollectionView 部分之间的单元格拖动?

UICollectionView 在单元格上拖动手指以选择它们

如果项目未移动,是不是有方法检查 UICollectionView 项目拖动取消?