/ / Zakázať klepnutie gesta na ovládači zobrazenia dieťaťa? Ako zistiť Je to PanGesture alebo TapGesture? - ios, objektív-c, xcode, kakao-touch, uigesturerecognizer

Zakázať klepnutie gesta na ovládači zobrazenia dieťaťa? Ako zistiť Je to PanGesture alebo TapGesture? - ios, objektív-c, xcode, kakao-touch, uigesturerecognizer

All.

V mojej aplikácii pre systém iOS 8.0.

V architektúre Parent Child View. Týmto kódom ...

[self addChildViewController:slideTableViewController];
[self.view addSubview:slideTableViewController.view];
[slideTableViewController didMoveToParentViewController:self];

Zaviedol som aplikáciu TapGesturerecognizer & PanGesturerecognizer na základnom monitore.

Tak, že to môže rozpoznať Pan (Dragging) a Tap. Potrebujem obe gestá na mojom BaseView.

Len nechcem, aby sa klepalo na gesto SlideView, Keď chcem spustiť metódu didSelectRowAtIndexpath v zobrazení pre deti,

Riešenie:

Odpoveď pre otázku 1: Mnoho odpovedí StackOverflow má rovnakú základňu .. Zakázať gesto klepnutia, keď dotyk narazí na detský pohľad.

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

Odpoveď pre druhú otázku:

Ako zistiť Je to PanGesture alebo TapGesture?

pre každý Typ gest, ktorý delegát zavolá

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

Ak ste vo svojom pohľade zaviedli dve gestá, gesto gesto a dotykové gesto,

Táto metóda bude volaná 2 krát, 1 čas pre pan gesto a 1 čas pre gesto klepnutia.

Takže v tejto metóde môžete skontrolovať ako isKindOfClass metóda.

Veľmi vám ďakujem za pomoc ......

tu zadajte popis obrázku

odpovede:

2 pre odpoveď č. 1

Môžete implementovať metódu delegáta gesta vo svojom baseViewController :

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldReceiveTouch:(UITouch *)touch {
return touch.view == self.view;
}

OR // Ak ide o gestu na poklepanie a dotyk sa dotýka perikulárneho pohľadu, pre to máme túto metódu.

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

4 pre odpoveď č. 2

Stačí nastaviť tapGesture.cancelsTouchesInView = YES;


0 pre odpoveď č. 3

Urobil som to v UIViews Dúfam, že by vám to mohlo pomôcť:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *touch = [touches anyObject];
[touch locationInView:self.view];
if(touch.view == self.topView )
{
//just return
}
if(touch.view == SOSTopView )
{
//just return
}
}

0 pre odpoveď č. 4

Zdá sa, že by ste mali implementovať túto metódu UITableViewDelegate:

- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// you can add some logic here
return nil;
}

To zabráni výberu riadkov.


-1 pre odpoveď č. 5

Nie je tu a userInteractionEnabled majetku, ktorý môžete využiť? Takže môžete urobiť nasledovné:

slideTableViewController.userInterationEnabled = NO;