2016-05-17 1 views
1

enter image description hereTap Жеста подтаблица сенсорного обнаружить

Я создаю выдвижной ящик

self.isShowMenuVC = NO; 
_menuView = [MenuViewController viewController]; 
[self.menuView setDelegate:self]; 
[self addChildViewController:self.menuView]; 
[self.menuView.view setFrame:CGRectMake(-kMenuTableWidth, 0, kMenuTableWidth, self.view.frame.size.height)]; 
[self.view addSubview:self.menuView.view]; 
[self.menuView didMoveToParentViewController:self]; 

UITapGestureRecognizer *outsideTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.view addGestureRecognizer:outsideTap]; 
outsideTap.delegate = self; 

и при нажатии кнопки водопроводного я просто установить кадр _menuView.view вести себя как ящик

то, что я хочу, чтобы обнаружить связь вне ящика, но я не в состоянии это сделать

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
if (touch.view == self.menuView.view) { 
    NSLog(@"Touch Drawer"); 
} else { 
    NSLog(@"Touch Outside"); 
} 

return YES; 
} 

но всегда показывают Прикосновение Снаружи»

я что-то отсутствует, но не знаю, что заранее спасибо

Также попробуйте 2 жест, но не работает, потому что один жест в self.view так, когда Я нажимаю на вызов метода вызова 2 раза.

для этого я попытался отключить один жест, по-прежнему называя два раза

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

if (gestureRecognizer == self.touchInDrawer) { 
    NSLog(@"Touch in drawer"); 
    [self.touchOutSideDrawer setEnabled:NO]; 
} else { 
    NSLog(@"Outside"); 
    [self hideMenuView]; 
} 
return YES; 
} 

ответ

0

Я имею решить эту проблему с добавлением двух жест

@property (strong,nonatomic)  UITapGestureRecognizer   *touchInDrawer; 
@property (strong,nonatomic)  UITapGestureRecognizer   *touchOutSideDrawer; 

согласно Ответ @Eugene Зайченко в но все еще проблема, потому что вызов метода делегата два раза

также я не могу [self.touchOutSideDrawer setEnabled:NO]; при касании в выдвижном ящике, потому что после tha T он будет удалять с точки зрения и никогда не выполняется снова, если [self.touchOutSideDrawer setEnabled:YES];

но самое интересное,

_touchInDrawer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.menuView.view addGestureRecognizer:self.touchInDrawer]; 
self.touchInDrawer.delegate = self; 

_touchOutSideDrawer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.view addGestureRecognizer:self.touchOutSideDrawer]; 
self.touchOutSideDrawer.delegate = self; 

outsideTapped метод призывающую только один раз, так что я сдвинут мой весь код там и работает

- (void) outsideTapped:(UITapGestureRecognizer *)gestureRecognizer { 

if (gestureRecognizer == self.touchOutSideDrawer) { 
    // [self.view removeGestureRecognizer:self.touchOutSideDrawer]; 
    [self hideMenuView]; 
    NSLog(@"Outside"); 

} else { 
    NSLog(@"Touch in drawer"); 

    // [self.touchOutSideDrawer setEnabled:NO]; 

} 

} 
1

UITapGestureRecognizer не может обнаружить прикосновение вне поля зрения которой он принадлежит.

Вам необходимо создать еще один UITapGestureRecognizer и добавить их в self.menuView.view.

Также вы можете сделать два @property для жест распознавателей и проверить их внутри метода:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
if (gestureRecognizer == self.firstGesture) { 
    NSLog(@"Touch in first gesture"); 
} else { 
    NSLog(@"Touch in another gesture"); 
} 
+0

Я пробовал, что не работает, потому что я добавил жест в self.view, поэтому, когда я нажимаю на drawer gesture delegate method fire 2 раза –

+0

попытайтесь реализовать метод делегата: - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneousWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer и просто вернуть NO; –

+0

Также попробуйте реализовать метод: - (BOOL) gestureRecognizerShouldBegin: (UIGestureRecognizer *) gestureRecognizer –