2013-07-17 25 views
1

我有一个UIButton,当我点击一个非常小的子区域时,它只对我的手势做出反应。我是assuming,也许另一种观点是当我点击按钮内的其他地方时吞咽我的手势。如何知道接收当前手势的视图

问题是..有没有办法知道哪个UIView正准备接收水龙头?我知道我可以蛮横地强迫它附加所有的姿态处理程序,以我所有的意见..但似乎是太多的工作。有任何想法吗?

更新:下面 艾哈迈德的回答非常完美。我也加入到它的UIView的recursiveDescription快速找到问题的看法。

也就是说,如果我把一个断点上的NSLog行:

- (void)sendEvent:(UIEvent *)event 
{ 
    [super sendEvent:event]; 
    UIView *touchReceipientView =((UITouch *)[event.allTouches anyObject]).view; 
    NSLog(@"View = %@ ",touchReceipientView); 
} 

我得到这样的输出(作为一个例子):

(lldb) po [touchReceipientView recursiveDescription] 
<UIView: 0x1fd16470; frame = (0 430; 320 40); layer = <CALayer: 0x1fd164d0>> 
    | <UIButton: 0x1fd13030; frame = (297 0; 18 19); opaque = NO; tag = 11; layer = <CALayer: 0x1fd130f0>> 
    | | <UIImageView: 0x1fd13190; frame = (-41 -40.5; 100 100); alpha = 0; opaque = NO; userInteractionEnabled = NO; tag = 1886548836; layer = <CALayer: 0x1fd131f0>> 
    | | <UIImageView: 0x1fd14d00; frame = (1 2; 16 15); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1fdc8e50>> 

这让我找出有问题的立即UIView的!

+0

遍历的意见,从您的应用程序的关键窗口中启动,并发送'isFirstResponder'给他们。 – 2013-07-17 08:44:59

+0

gestureRecognizer.view – Desdenova

+0

@Desdenova如果我已经拥有了gestureRecognizer对象,那么我认为这个问题会变得微不足道? – abbood

回答

2

您可以继承UIApplication并查看谁正在接收事件。

和main.m文件,

@interface MyApplication : UIApplication 

@end 


@implementation MyApplication 

- (void)sendEvent:(UIEvent *)event 
{ 
    [super sendEvent:event]; 
    NSLog(@"View = %@", ((UITouch *)[event.allTouches anyObject]).view); 
} 

@end 





int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([MyAppDelegate class])); 
    } 
} 
+0

我假设你的意思是'@implementation MyApplication'吧? – abbood

+0

哇工作就像一个魅力! – abbood

+0

是的,我支持MyApplication。我会编辑它。 –

相关问题