2010-07-08 61 views
2

我想在用戶單擊屏幕時調用兩個類(超級視圖和全屏子視圖)中的操作。但是,當我添加一個UITapGestureRecognizer到子視圖時,被添加到超級視圖的被覆蓋。是否可以添加一個UITapGestureRecognizer到子視圖而不必重寫添加到超級視圖的UITapGestureRecognizer? 如果是這樣,我該怎麼做?是否有可能同時接收2個類的UITapGestureRecognizer調用

謝謝!

編輯: 從我的主要的viewController 「MyToolBerController」,我添加來自其他的viewController子視圖如下:

PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil]; 
myPhotoView = photoViewController.view; 
[self.view addSubview:myPhotoView]; 

我添加GestureRecognizer在MyToolBerController這樣的:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapFrom:)];   
[singleTap setNumberOfTapsRequired:1]; 
singleTap.delegate = self; 
[myPhotoView addGestureRecognizer:singleTap]; 
[singleTap release]; 

這一切工作正常,但我需要調用PhotoViewController類中的方法時,以及在MyToolBerController類中點擊視圖。 當我在photoViewController中添加另一個UITapGestureRecognizer時,它會覆蓋在superView中添加的UITapGestureRecognizer。

回答

5

在您的手勢識別器選擇器方法中,將信息傳遞給子視圖。對於相同的手勢,不需要具有多個手勢識別器。喜歡的東西:

- (IBAction)handleSingleDoubleTap:(UIGestureRecognizer *)sender 
{ 
    CGPoint tapPoint = [sender locationInView:sender.view.superview]; 
    UIView *subview = [parentView viewWithTag:100]; 
    [subview doSomethingWithPoint:tapPoint]; 
} 

當然,這意味着你的子視圖需要通知應給予標籤100無論是在界面生成器或代碼時的視圖控制器被加載。

更新基於約拿代碼:

因此,而不是保留看法,保留視圖控制器:

PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil]; 
self.myPhotoViewController = photoViewController; 

這意味着你需要這樣聲明它在MyToolbarController頭:

@property (nonatomic, retain) PhotoViewController *myPhotoViewController; 

然後,當您的手勢選擇器被調用時,將消息傳遞給視圖控制器y ou保留。例如:

- (IBAction)handleSingleTapFrom:(UIGestureRecognizer *)sender 
{ 
    CGPoint tapPoint = [sender locationInView:sender.view.superview]; 
    [myPhotoViewController doSomethingWithPoint:tapPoint]; 
} 

當然,-doSomethingWithPoint:方法僅用於舉例。你可以命名並創建你想要的任何方法,它接受你想在PhotoViewController中傳遞的參數。

讓我知道你是否需要進一步澄清。

+0

感謝您的幫助!不幸的是,我通過將uiviewcontroller的視圖添加爲子視圖來打破規則。第二個UIGestureRecognizer添加到新的UIViewController中。我想使用pushViewController方法,但我需要查看只佔用部分屏幕。這會繼續嗎? – Jonah 2010-07-08 20:28:17

+0

只要你可以用指針獲得視圖或其視圖控制器,你可以發送消息給它,它可以響應。你沒有違反規則。你在做什麼很好。您的視圖控制器可以是手勢發生時您的消息發送到的代理。如果視圖具有視圖控制器,則不必是視圖本身。這是視圖**控制器**的目的是處理髮送到視圖和從視圖發送的消息。當您創建副視圖時,只需保留您的視圖控制器,並在您的手勢識別器選擇器中將參數傳遞給它。 – 2010-07-08 20:43:52

+0

這正是我需要的。我怎樣才能得到一個指針的viewController舉行?我已經嘗試過使用「@class myViewController」,但是我不確定如何正確實現它,並且我找不到任何示例代碼來顯示如何執行此操作。你會如何推薦這樣做? 感謝您的幫助! – Jonah 2010-07-08 20:57:29

7

手勢識別器可以在手勢發生時分派多個動作。您可以添加子視圖作爲手勢識別器的另一個目標,並僅使用單個UITapGestureRecognizer實例:

[tapRecognizer addTarget:theSubview action:@selector(whatever:)]; 
相關問題