从一组UIViews中检测触摸

时间:2012-01-05 13:02:22

标签: uiview touch

我正在研究在网格布局中具有许多UIview的视图控制器。这些视图有一些交互(如按钮等)。但是在触摸该视图时,我想要一个新的视图控制器出现。 我找不到从这些视图中检查触摸的方法。有一个方法CGRectContainsPoint ...但我有多个UIViews。

请帮帮我!

2 个答案:

答案 0 :(得分: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获取坐标,然后将它们与原始视图的子视图进行比较。

我认为其他可能的解决方案可能是:

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相应地执行操作时,您可以让(子)视图通知您的viewcontroller。

答案 1 :(得分:0)

解决此问题的另一种方法是在您的视图中添加手势识别器以获取水龙头:

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

只要轻触视图,就会调用方法。 希望这会有所帮助。