2012-01-05 49 views
0

我正在處理網格佈局中有很多UIview的視圖控制器。這些視圖有一些交互(如按鈕等)。但是在觸及該視圖時,我想要出現一個新的視圖控制器。 我找不到從這些視圖中檢查觸摸的方法。有一個方法CGRectContainsPoint ...但我有多個UIViews。從UIViews數組中檢測觸摸

請幫我一把!

回答

1

你試過了嗎?

-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event { 

    CGPoint point = [[touches anyObject] locationInView:self.view]; 
    if (CGRectContainsPoint(subview1.frame, point)) 
    { 
    //show viewcontroller1 
    } 
    if (CGRectContainsPoint(subview2.frame, point)) 
    { 
    //show viewcontroller2 
    } 
} 

這樣,您應該能夠確定觸摸哪個子視圖。

這個想法是,首先根據self.view獲取座標,然後將它們與原始視圖的子視圖進行比較。

我認爲,其他可能solutoions可能是:

1使用keyValueObserving http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html


2 NSNotificatonCenter消息http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html

使用這兩種方法可以讓你的(子)的意見顯示你的ViewController時您的子視圖會檢測觸摸並讓視圖控制器相應地執行操作。

+0

我的視圖包含兩個按鈕,所以點擊這些按鈕將touchesBegan被調用或touchUpInside?此外,網格包含12個視圖,因此我必須在touchesBegan方法中使用循環...但是,每次檢測到觸摸時運行該循環的有效方法是什麼? – SamG 2012-01-05 13:57:23

+0

有兩件事情可能發生,當你的按鈕被觸摸時,與之相連的選​​擇器將被調用。否則,如果視圖被觸摸,touchesbegan將被調用。我同意這可能不是解決這個問題的最有效方式。我將編輯我的答案以描述這樣做的兩種不同方式。 – 2012-01-05 14:10:03

0

解決這一問題將是手勢識別器添加到您的意見拿起水龍頭的另一種方式:

UITapGestureRecognizer *tapGestureRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_method_:)]; 
    [_view_ addGestureRecognizer:tapGestureRecogniser]; 
    [tapGestureRecogniser release]; 

這就需要方法每當視圖被竊聽。 希望這有助於。

+0

我試過這個。但問題仍然存在,這些觀點有按鈕被挖掘。在添加點擊獲取以完成視圖時,與這些按鈕耦合的動作不會被調用,而是會崩潰。 – SamG 2012-01-06 07:39:52