2012-04-17 8 views
19

ich UITableViewCell subclassed habe und in dieser Klasse beantrage ich eine Pan Geste Erkenner:UIPanGestureRecognizer auf UITableViewCell überschreibt UITableView die Scroll-Ansicht Gestenerkenner

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)]; 
panning.minimumNumberOfTouches = 1; 
panning.maximumNumberOfTouches = 1; 
[self.contentView addGestureRecognizer:panning]; 
[panning release]; 

ich den Delegaten Protokoll dann implementieren, die in der gleichzeitige Gesten ermöglichen soll Ansicht der Tabelle:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Dann lege ich ein Protokoll innerhalb der handlePanning Methode nur um zu sehen, wenn er erkannt hat:

- (void)handlePanning:(UIPanGestureRecognizer *)sender { 
    NSLog(@"PAN"); 
} 

Mein Problem ist, dass ich nicht vertikal durch die Liste der Zellen in der Tabellenansicht scrollen kann und dass handlePanning heißt, egal welche Richtung ich schwenken.

Was ich will ist für handlePanning nur dann aufgerufen werden, wenn es nur horizontal schwenken und nicht vertikal. Würde mich über einige Hinweise freuen.

Antwort

16

Haben Sie versucht, pannings Delegate-Eigenschaft zu setzen?

panning.delegate = /* class name with the delegate method in it */; 

Sie müssen diese Klasse auch UIGestureRecognizerDelegate anpassen.

2

die Geste Erkenner Auf Tableview hinzufügen. Von diesem können Sie das Zellobjekt erhalten. Von dort aus können Sie mit der Zellenfunktionalität umgehen. Für jede Geste wird ein Anfangs-, Veränderungs- und Endzustand definiert. Speichern Sie die Anfangsposition.

CGPoint beginLocation = [gesture locationInView:tblView]; // touch begin state. 

    CGPoint endLocation = [gesture locationInView:tblView]; // touch end state. 

diesen Punkt verwenden, können Sie die IndexPath

NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint]; 

Von diesem indexPath erhalten, können Sie die Zelle zugreifen können.

  UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath]; 

Mit diesem Cell-Objekt können Sie damit umgehen.

+1

"indexPathForRowAtPoint" - danke, genau ich suchte nach –

-1

Haben Sie versucht, die Bounces-Eigenschaft auf NO zu setzen?

+1

WOW! Was?! ^. ^ –

Verwandte Themen