在具有 UITableView 的 UICollectionView 中拖放

Posted

技术标签:

【中文标题】在具有 UITableView 的 UICollectionView 中拖放【英文标题】:Drag and Drop in UICollectionView that has UITableView 【发布时间】:2016-09-27 11:05:53 【问题描述】:

我有水平滚动的 UICollectionView。每个集合视图单元格都有一个垂直滚动的表格视图。我想在表格视图本身以及每个集合视图单元格内的不同表格视图之间实现表格视图单元格的拖放。 需要一些教程或帮助来实现该功能。

【问题讨论】:

你的意思是像 Trello ios 应用程序? @karthik,与 Trello 应用程序中的行为完全相同。有什么想法吗? 你可以选择uipagecontroller,而不是collection view。 trello 处理相同。给你,如果我有的话。 @Satyam 你做过这个设计吗?我需要你的帮助 @Jason,抱歉我没能做到。 【参考方案1】:

你可以试试这些教程

https://www.raywenderlich.com/63089/cookbook-moving-table-view-cells-with-a-long-press-gesture http://www.freshconsulting.com/create-drag-and-drop-uitableview-swift/ http://www.andypierz.com/blog/2014/11/9/basic-drag-and-drop-uitableviews-using-swift-and-core-data

http://www.iostute.com/2016/02/how-to-re-order-table-view-cell-by-drag.html

一些有用的库

https://github.com/andreamazz/UIView-draggable
https://github.com/ra1028/RACollectionViewReorderableTripletLayout
https://github.com/lukescott/DraggableCollectionView
https://github.com/grillbiff/DragAndDropTableView

【讨论】:

感谢分享信息。在发布这个问题之前,我已经阅读了所有这些教程。我想在属于集合视图单元格的表视图之间拖放。【参考方案2】:

@Satyam,它可能会帮助您了解一些想法。 trello ios 应用程序有自己的库来获取这些行为。

-> uiViewController    
 -> uiScrollView
   -> uiPageViewController
     -> uiTableViewController
       -> drag and drop behaviour. while dragging, scrollview helps you to get the moving behaviour. 

https://www.cocoacontrols.com/controls/icarousel

【讨论】:

复杂性在于识别表格视图中的长按并通过滚动视图在多个表格视图中导航。【参考方案3】:

快速启动了一个测试项目,据我测试,它运行良好。

https://github.com/BridgeTheGap/Trelloesque

秘诀是以下两种方法:

func convertPointToIndexPath(point: CGPoint) -> (UITableView, NSIndexPath)? 
    if let tableView = [tableView1, tableView2, tableView3].filter( $0.frame.contains(point) ).first 
        let localPoint = scrollView.convertPoint(point, toView: tableView)
        let lastRowIndex = focus?.0 === tableView ? tableView.numberOfRowsInSection(0) - 1 : tableView.numberOfRowsInSection(0)
        let indexPath = tableView.indexPathForRowAtPoint(localPoint) ?? NSIndexPath(forRow: lastRowIndex, inSection: 0)
        return (tableView, indexPath)
    

    return nil

虽然不完全相同,但我认为它足以让你继续努力。

免责声明:没有时间对其进行测试,因此可能容易出错。

【讨论】:

你有 Objective c 版本的 Trelloesque 吗? 很遗憾没有。我还发现了一些错误。

以上是关于在具有 UITableView 的 UICollectionView 中拖放的主要内容,如果未能解决你的问题,请参考以下文章

具有可变行高的 UITableview 在重新排序时崩溃

具有实时数据的 UITableView 也同时具有用户交互

具有自动布局的 UITableView 在横向模式下不会填满屏幕。为啥?

具有透明背景的 UITableView 具有纯黑色边框

在具有透明度的 UITableView 单元格中更新 UIImageView

如何在 UITableview 中创建具有 n 行数的 UITextField