2012-01-05 10 views
0

私は、グリッドレイアウトで多くのUIviewを持つビューコントローラで作業しています。これらのビューには、ボタンなどのようなやりとりがあります。しかし、そのビューに触れると、新しいView Controllerが表示されます。 これらのビューから接触を確認する方法が見つかりません。 CGRectContainsPointメソッドがありますが、複数のUIViewがあります。UIViewの配列からのタッチを検出する

私を助けてください!

答えて

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が可能と思う:あなたは(サブ)ビュー時にあなたのViewControllerを通知させることができ、両方の方法では

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

あなたのサブビューはタッチを検出し、それに応じてビューコントローラを動作させます。

+0

私のビューには2つのボタンが含まれているため、これらのボタンをタップするとtouchesBeganが呼び出されるかtouchUpInsideになりますか?さらにグリッドには12のビューが含まれているので、touchesBeganメソッドでループを使用する必要があります...しかし、タッチが検出されるたびにそのループを実行する効率的な方法ですか? – SamG

+0

ボタンがタッチされると、それに結合されたセレクターが呼び出される2つのことが起こります。それ以外の場合は、ビューにタッチするとtouchesbeganが呼び出されます。私はそれがこの問題を処理する最も効率的な方法ではないかもしれないことに同意します。私はこれを行う2つの異なる方法を説明するために私の答えを編集します。 –

0

この問題に取り組むための別の方法は、タップを拾うためにあなたの意見にジェスチャー認識装置を追加することです:ビューがタップされるたびに

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

これはメソッドを呼び出します。 これが役立つことを願っています。

+0

私はこれを試しました。しかし、まだ問題は残っていますが、これらのビューにはタップするボタンがあります。ビューを完成させるためにタップ取得を追加すると、これらのボタンに結合されたアクションは呼び出されず、クラッシュします。 – SamG

関連する問題