用户单击 UITableView 中的单元格进行重新排序,我如何知道被拖动单元格的索引和位置?

Posted

技术标签:

【中文标题】用户单击 UITableView 中的单元格进行重新排序,我如何知道被拖动单元格的索引和位置?【英文标题】:User clicks cell in a UITableView to reorder, how can I know the index and location of the cell being dragged? 【发布时间】:2012-11-05 22:40:33 【问题描述】:

使用提供的 reorderControls,用户可以点击并按住以拖动单元格以重新排序。我如何知道他们选择了要拖动的单元格以及当前单元格的位置(即,当其他单元格动画为浮动单元格腾出空间时,我想要移动单元格的索引)?

我要做的是滚动视图,以便如果用户希望使用屏幕外单元格重新排序当前单元格,则屏幕外单元格将在屏幕上滚动。我不能使用内置行为,因为我的设置是:

UIScrollView(父级)

UITableView(子)

并且 UITableView 框架是其 contentSize 的完整大小(它不滚动)。我需要相对于用户拖动单元格的位置滚动外部 UIScrollView 以在 UITableView 中重新排序。

我尝试查看委托和数据源函数,但到目前为止没有运气。还尝试了谷歌搜索和 Apple 文档...

编辑:好像我无法阅读文档。委托协议中的tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath: 给了我我需要的东西。

解决方案:创建一个从 tableview 到滚动视图控制器的委托(我的 tableview 是它自己的委托)。在提议的索引路径函数中,我向代理发送了需要变得可见的providedDestinationIndexPath 附近的单元格。如果 indexpath 为 0 或最大值,这可能是该单元格本身。然后在委托中,我使用 [view convertPoint:FromView:] 函数计算该单元格的位置,并设置滚动视图的内容偏移量以使该单元格可见! 谢谢

【问题讨论】:

为什么表格视图是滚动视图? UITableViewUIScrollView?除了表格视图之外,滚动视图中还有其他内容吗? @rmaddy 是的,还有很多其他的东西,比如 MKMapView、一些标签和图像视图等等。 【参考方案1】:

通常,当您拖动单元格时,表格视图会在您到达顶部或底部时自动滚动。听起来滚动视图的使用阻止了它正常工作,因为表格视图认为它足够大而不能滚动。没有正常的 API 调用可以为您提供所需的答案。

我能想到的唯一能让你接近的事情是tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath: 表视图委托方法的实现。

proposedIndexPath 可以让您大致了解用户当前拖动行的位置。您可以使用该 indexPath 向表询问路径的CGRect。然后将其转换为滚动视图的内容视图中的一个位置。

但这远非完美。

另一种可能是将观察者添加到被移动单元格的framecenter 属性。

【讨论】:

它不起作用是有道理的,因为 UITableView 基本上不能滚动。感谢您提出该方法。我忽略了它,但在文档中它说Every time the dragged row is over a destination, the table view sends tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath: to its delegate (if it implements the method). In this method the delegate may reject the current destination for the dragged row and specify an alternative one. 所以它可能工作:) 哇,太完美了,每次底部单元格动画时它都会收到调用!谢谢。我可以计算该单元格的位置并做一些数学运算来设置 UIScrollView 的 contentOffset

以上是关于用户单击 UITableView 中的单元格进行重新排序,我如何知道被拖动单元格的索引和位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写 UI 测试来测试单击 UITableView 中的第一个单元格时图像是不是存在?

当 UITableView 单元格中的进度条不可见时,如何更新它们

UITableview单元格图像中的uiimageview中的UIButton没有改变

单击按钮时将单元格动态添加到 UItableview

滚动会弄乱 UITableView 中的自定义单元格

uitableview中的多个segues