2012-12-20 22 views
2

我有一個UIView在那裏我加了UITapGestureRecognizer的UIBarButtonItem和UIGestureRecognizer

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 
tapRecognizer.numberOfTapsRequired=1; 
tapRecognizer.numberOfTouchesRequired=1; 
[self.myView addGestureRecognizer:tapRecognizer]; 

然後我和一個按鈕添加一個UIToolBar的觀點:

UIToolbar *topBar = [[UIToolbar alloc ]initWithFrame:CGRectMake(0, 0, self.myView.frame.size.width, 44)]; 
topBar.barStyle = UIBarStyleBlackTranslucent; 

UIBarButtonItem *logout = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout)]; 

[topBar setItems:@[logout] animated:NO]; 

我有一個問題,我點擊註銷按鈕,然後我的點擊識別器會觸發,而不是我的註銷操作。如果我點擊並按住,則註銷操作將會觸發(我猜測水龍頭識別器失敗,因此讓buttion動作觸發)。

當按下按鈕時,我該如何不能觸發手勢識別器?

回答

0

檢查您的水龍頭識別器中的視圖。如果是您的註銷按鈕,請讓觸摸無法通過super將其傳遞到鏈上。

或者,確保您的工具欄不是您的視圖的子視圖。相反,請在工具欄和內容視圖中包含容器視圖,並將手勢識別器添加到此內容視圖。

+0

識別器的觀點始終是MyView的。我正在tapDetected:方法中檢查它。如果沒有其他作品,我會使用內容視圖。 – Padin215

-1

實施UIGestureRecognizer的這種委託方法(記得設置你的tapRecognizer.delegate =個體經營)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch: (UITouch *)touch { 

    if ([touch.view isKindOfClass:[UIBarButtonItem class]]) 
    { 
     return NO; 
    } 
    return YES; 
} 
+3

這不起作用。 'UIBarbuttonItem'不是'UIView'子類。因此,觸摸的觀點永遠不會屬於這一類。顯示UIBarButtonItem的UIView子類是私有類(例如'UIToolbarButton'或'UIToolbarTextButton') –

4

剛剛有同樣的問題。因爲我不想介紹容器視圖(UIToolbar應該覆蓋我現有的視圖)。隨着Patrick.Ji的粗指向的幫助下,我來到了這一點:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view.superview isKindOfClass:[UIToolbar class]]) { 
     return NO; 
    } 
    return YES; 
} 

不要忘了手勢的委託設置爲self

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UITapGestureRecognizer *mainTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mainTapGesture:)]; 
    mainTapGestureRecognizer.delegate = self; 
    [self.view addGestureRecognizer:mainTapGestureRecognizer]; 
} 
+0

我討厭使用這樣的黑客,但它被包含。謝謝 – Carl