我有一個UIViewController,其視圖有一個自定義子視圖。當發生子視圖觸摸事件時通知視圖控制器
此自定義子視圖需要跟蹤觸摸事件並報告滑動手勢。
目前我把touchesBegan,touchesMoved,touchesEnded和touchesCancelled在子視圖類中。通過一些額外的邏輯,我可以輕掃手勢並調用我的handleRightSwipe和handleLeftSwipe方法。所以現在當我在子視圖中滑動時,它會調用其本地刷卡處理方法。這一切工作正常。
但我真正需要的是handleRightSwipe和handleLeftSwipe方法在視圖控制器中。我可以將它們留在子視圖類中,但是我必須引入所有的邏輯和數據,並且這種打破了MVC的想法。
所以我的問題是有一個乾淨的方式來處理這個問題?基本上我想保留我的觸摸事件方法在子視圖中,以便它們只觸發特定的視圖。但是我也希望當這些觸摸事件(或者在這種情況下是輕掃手勢)發生時通知視圖控制器。
任何想法?
謝謝。
UPDATE:
使用Henrik的建議,下面是我做了什麼(以節省您的讀數)的快速樣品:
設置我的視圖控制器作爲通知的觀察者(早期) 。
// NOTIFICATION_LEFT_SWIPE is defined as some unique string elsewhere.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
// Note that imageView is the instance of my subview that is calling the notification.
// You can set this to nil if you don't want it to be specific.
[nc addObserver:self selector:@selector(handleLeftSwipe) name:@NOTIFICATION_LEFT_SWIPE object:imageView];
然後我執行handleLeftSwipe方法。這將在收到通知時被調用。
現在在我的子視圖我送收到輕掃手勢時通知:
// Note that NOTIFICATION_LEFT_SWIPE is the same one used in the view controller
// I put this in a global header I use. This is how you keep track of notifications.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@NOTIFICATION_LEFT_SWIPE object:self];
同樣地,對於右輕掃。
啊謝謝你先生!這工作完美。我甚至沒有聽說過通知中心,但它確實是我所需要的。 – nebs 2010-06-16 20:16:07