3

我正在创建一个带有拖放可重新排列事件的日历。

视图层次结构如下所示:
ViewController - ScrollView - CalendarWeekView - EventView

scrollView 启用了分页,我一次显示一周。为了实现跨周的连续滚动,我在滚动时回收了三个 WeekCalendarView 对象。各个 EventView 是 CalendarWeekView 的子视图。

我希望能够将一个 EventViews 从一个星期拖放到另一个星期。

我在可见的一周内通过 EventViews 上的 UILongPressGestureRecognizer 设置进行了拖放操作。我在 WeekView 中添加了“热边缘”来触发滚动,这样我就可以从当前一周拖放到它工作的任一侧。

但是,如果我从最初的一周开始滚动超过一周,则会发生视图回收,并且创建并“拥有”我正在拖动的 EventView 的 WeekView 将被回收(属性重置)。我正在拖动的事件对象被重置并重用,从而终止了拖动行为(或者充其量改变了被拖动的事件!)。

我想我需要将拖动视图与 WeekViews 分离,在拖动时为我的事件创建一个新对象。

如何将 EventView 中的长按手势事件传递给这个新对象?

4

1 回答 1

0

如何将 EventView 中的长按手势事件传递给这个新对象?

正如您所建议的那样:D 您可以使用addTarget:action:removeTarget:action:调整手势识别器调用的对象上的方法。如果您愿意,您甚至可以同时拥有多个目标。

在你的情况下,你可能想要这样的东西:

[g removeTarget:self action:NULL]; // Remove everything that this object added
[g addTarget:newObject action:newSEL];

编辑:由于您正在拖动特定的 EventView,而不是创建一个新的 EventView 并处理洗牌 GR,因此请尝试将拖动的 EventView 移动到另一个超级视图(可能是滚动视图,尽管我什至将 UIWindow 用于这种事物)。

于 2012-10-09T22:28:36.177 回答