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

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

scrollView已启用分页,我一次显示一个星期。为了跨星期连续滚动,我有三个WeekCalendarView对象,在滚动时会回收这些对象。各个EventView是CalendarWeekView的子视图。

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

我可以在可见的一周内使用EventViews上的UILongPressGestureRecognizer设置进行良好的拖放。我在WeekView中添加了“热边缘”以触发滚动,因此我将其从当前周拖放到工作周的任一周。

但是,如果我离开第一周滚动了一个多星期,则会发生视图回收,并且创建并“拥有”我拖动的EventView的WeekView将被回收(属性重置)。我正在拖动的事件对象将被重置并重新使用,从而取消了拖动行为(或充其量只是在拖动过程中更改了被拖动的事件!)。

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

如何将长按手势事件从EventView传递到此新对象?

最佳答案

如何将长按手势事件从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移至另一个 super 视图(可能是滚动视图,尽管我甚至已经将UIWindow用于此类事情)。

关于ios - 在手势过程中切换对象(拖放),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12809256/

10-14 05:24