2012-10-09 49 views
3

我正在使用拖放可重排事件創建日曆。在手勢期間切換對象(拖放)

視圖層次是這樣的:
視圖控制器 - 滾動型 - CalendarWeekView - 使用EventView

滾動視圖,使傳呼,我分別用一週的時間。爲了能夠在幾個星期內連續滾動,我有三個WeekCalendarView對象,在我滾動時回收。單個的EventViews是CalendarWeekView的子視圖。

我希望能夠拖動並從一週下降一個EventViews到另一個。

我有可見,每週工作細跟的上一個EventViews設置UILongPressGestureRecognizer內拖放。我在周視圖中添加了「熱邊緣」來觸發滾動,使用這個功能,我可以從當前的周拖放到周的任何一側。

但是,如果我滾動一個多星期遠離我最初一週的看法發生了回收和WeekView這創造和「擁有」我拖着得到回收的EventViews(屬性重置)。我正在拖動的事件對象被重置並重新使用,從而消除了拖動行爲(或者最多可以改變拖動中拖動的事件!)。

我想我需要去耦從WeekViews拖動視圖,爲我的事件創建新的對象,而它被牽扯進來。

如何將EventView中的長按手勢事件傳遞給此新對象?

回答

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移動到另一個超級視圖(可能是滾動視圖,儘管我甚至使用過UIWindow來實現這種功能)。

+0

謝謝!這很好。 – alexkent

+0

非常抱歉,我過早地接受了你的答案。您的解決方案將手勢的目標移動到新視圖,但是當原始視圖被回收時,手勢識別器本身(現在定位到新視圖)消失。 :(是否有可能移動的手勢識別器本身我嘗試了很明顯的:dragView.gestureRecognizers = sender.gestureRecognizers; sender.gestureRecognizers =零;而零殺死手勢 – alexkent

+0

更好的方式來切換哪個視圖擁有GR是?與addGestureRecognizer:和removeGestureRecognizer :.但它有可能removeGestureRecognizer:會以同樣的方式重新設置GR見編輯你也許可以只保留使用了同樣的觀點,而不是移動GR –