2010-06-16 52 views
1

我有一個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]; 

同樣地,對於右輕掃。

回答

1

您可以使用Notification Center向不同(觀察)對象發送通知。

+0

啊謝謝你先生!這工作完美。我甚至沒有聽說過通知中心,但它確實是我所需要的。 – nebs 2010-06-16 20:16:07

1

您還可以使用OS 3.2及更高版本中提供的手勢識別器系統;手勢識別器可讓您將視圖處理從視圖類中分離出來,並且非常適合您在此處進行的操作。在這種情況下,您需要創建一個UIPanGestureRecognizer實例,將您的控制器添加爲識別器的目標(使用通常的-addTarget:action:語法),然後使用-addGestureRecognizer:將識別器添加到您的視圖。然後,您的控制器會在用戶滑過視圖時獲取一系列動作消息,並可以通過調用識別器的方法來檢查動作。

相關問題