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 ......
odpovede:
2 pre odpoveď č. 1Môž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;