UICollectionView 支持拖放重新排序和上下文菜单

问题描述 投票:0回答:2

我正在尝试使用实例方法 moveItemAt

contextMenuConfigurationForItemAt
在 UICollectionView 中实现重新排序
AND
上下文菜单。这两种解决方案本身都可以正常工作,但是当我尝试在 UICollectionView 中实现这两种解决方案时,上下文菜单优先,并且我无法使用拖放重新排序。

有没有办法在同一个集合视图中使用这两种方法? 或者,是否有人熟悉使用其他解决方案支持这些功能的方法?我目前正在考虑实施拖/放委托作为解决方法。

下面是我正在使用的代码的示例。该项目针对的是iOS14。

extension myViewController {
    override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        let temp = items.remove(at: sourceIndexPath.item)
        items.insert(temp, at: destinationIndexPath.item)
    }

    override func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
        let index = indexPath.row
        
        let config = UIContextMenuConfiguration(
            identifier: nil,
            previewProvider: nil){ [self] _ in
            return UIMenu(
                title: "",
                image: nil,
                identifier: nil,
                children: [deleteAction(index: index),editAction(index: index)])
        }
        return config
    }
}
ios uicollectionview uikit
2个回答
0
投票

用新的拖放 API 替换 moveItemAt API,您将免费获得此行为!


0
投票

我面临同样的问题,但在 .Net MAUI 项目中,因此增加了另一层复杂性。

在寻找解决方案时,我遇到了这篇博客文章,其中显示了一个示例 Swift 应用程序,该应用程序支持在同一 UICollectionView 中重新排序和长按上下文菜单。该代码可在 GitHub 上找到,并且可能会提示您如何在自己的应用程序中实现此功能。

© www.soinside.com 2019 - 2024. All rights reserved.