0

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

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

UIScrollView(父)

  • UITableView(子)

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

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

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

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

4

1 回答 1

0

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

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

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

不过,这远非完美。

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

于 2012-11-05T22:55:04.333 回答