我有一個看起來像這樣的視圖層次結構:UIView (A)UIView > UIImageViewUIView > UIView (B)UIView > UIView (B) > Rounded Rect ButtonUIView > UIView (B) > UIImageViewUIView > UIView (B) > UILabel我已將手勢識別器附加到我的UIView(B)。我面臨的問題是我沒有對UIView(B)內的Rounded Rect Button采取任何操作。singleTap手勢識別器捕獲/覆蓋按鈕的“ Touch Up Inside”事件。我該如何運作?我認為響應者鏈層次結構將確保將優先考慮按鈕觸摸事件,并且它將被觸發!我想念什么?以下是一些相關代碼:#pragma mark -#pragma mark View lifecycle (Gesture recognizer setup)- (void)viewDidLoad { [super viewDidLoad]; // double tap gesture recognizer UITapGestureRecognizer *dtapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognizer:)]; dtapGestureRecognize.delegate = self; dtapGestureRecognize.numberOfTapsRequired = 2; [self.viewB addGestureRecognizer:dtapGestureRecognize]; // single tap gesture recognizer UITapGestureRecognizer *tapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureRecognizer:)]; tapGestureRecognize.delegate = self; tapGestureRecognize.numberOfTapsRequired = 1; [tapGestureRecognize requireGestureRecognizerToFail:dtapGestureRecognize]; [self.viewB addGestureRecognizer:tapGestureRecognize]; // add gesture recodgnizer to the grid view to start the edit mode UILongPressGestureRecognizer *pahGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognizerStateChanged:)]; pahGestureRecognizer.delegate = self; pahGestureRecognizer.minimumPressDuration = 0.5; [self.viewB addGestureRecognizer:pahGestureRecognizer]; [dtapGestureRecognize release]; [tapGestureRecognize release]; [pahGestureRecognizer release];}#pragma mark -#pragma mark Button actions- (IBAction)buttonTouchUpInside:(id)sender { NSLog(@"%s, %@", __FUNCTION__, sender);}#pragma mark -#pragma mark Gesture recognizer actions- (void)singleTapGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { NSLog(@"%s", __FUNCTION__);}
3 回答

開心每一天1111
TA貢獻1836條經驗 獲得超13個贊
在“ shouldReceiveTouch”方法中,應添加一個條件,如果觸摸按鈕,則該條件將返回NO。
這來自蘋果的SimpleGestureRecognizers示例。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
? ? // Disallow recognition of tap gestures in the segmented control.
? ? if ((touch.view == yourButton)) {//change it to your condition
? ? ? ? return NO;
? ? }
? ? return YES;
}
希望對你有幫助
正如丹尼爾(Daniel)指出的那樣,您必須遵守UIGestureRecognizerDelegate它才能正常工作。
- 3 回答
- 0 關注
- 603 瀏覽
添加回答
舉報
0/150
提交
取消