按鈕的觸摸事件所以我有具有容器視圖的視圖控制器。容器視圖嵌入了導航控制器,該控制器也是視圖控制器的父控制器。故事板是這樣的:安裝有容器視圖敲擊手勢識別器不阻擋在容器的視圖,但塊的工具欄按鈕的觸摸事件
視圖控制器(mainViewController
) - >導航控制器 - >視圖控制器(contentViewController
)
可以看到故事板的屏幕截圖中的下方。
第一箭頭是從容器視圖一個嵌入到賽格瑞導航控制器。第二個箭頭是代表contentViewController
的關係是導航控制器的根視圖控制器。
mainViewController
和contentViewController
是同一類的對象,名爲testViewController
。它是UIViewController的子類。它的實現很簡單。它只有三個IBAction
方法,沒有別的。下面是實現代碼:
#import "TestViewController.h"
@implementation TestViewController
- (IBAction)buttonTapped:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"button is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
- (IBAction)barButtonTapped:(id)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"bar button is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
- (IBAction)viewTapped:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"view is tapped"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
}
@end
我在mainViewController
加入敲擊手勢識別器到容器視圖。當點擊容器視圖時,它將viewTapped:(id)sender
消息發送到mainViewController
。內部的contentViewController
根視圖的,有一個按鈕時輕敲它發送buttonTapped:(id)sender
消息contentViewController
。並且存在的contentViewController
工具欄抽頭時,它發送barButtonTapped:(id)sender
消息contentViewController
在欄按鈕。最初的場景是mainViewController
。當應用程序運行時,我發現只有酒吧按鈕的觸摸事件被阻止,觸摸事件被按鈕正確處理。在蘋果公司的文檔,Regulating the Delivery of Touches to Views,它說:
在簡單情況下,當觸摸時,觸摸對象從UIApplication對象到一個UIWindow對象傳遞 。然後,窗口 首先發送到觸摸任何手勢識別附其中 這些觸摸發生視圖(或到該視圖的superviews),它通過 觸摸視圖對象本身之前。
我想觸摸事件將不會傳遞到按鈕。這真讓我困惑。有人可以解釋這種行爲嗎?非常感謝你。
截圖故事板的: