2009-10-19 11 views
56

Ich habe UITableView (als KRTableView) subklassifiziert und die vier Touch-basierten Methoden (touchesBegan, touchesEnded, touchesMoved und touchesCancelled) implementiert, so dass ich erkennen kann, wann ein Touch-basiertes Ereignis in einem UITableView behandelt wird . Im Wesentlichen muss ich erkennen, wenn der UITableView nach oben oder unten scrollt.UITableView scrollen

Die Unterklasse UITableView und das Erstellen der obigen Methoden erkennt jedoch nur, wenn Scrollen oder Fingerbewegung innerhalb einer UITableViewCell auftritt, nicht auf der gesamten UITableView.

Sobald mein Finger in die nächste Zelle bewegt wird, machen die Berührungsereignisse nichts. Diese

ist, wie ich Subklassen UITableView:

#import "KRTableView.h" 


@implementation KRTableView 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    NSLog(@"touches began..."); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    NSLog(@"touchesMoved occured"); 
} 

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event { 
    [super touchesCancelled:touches withEvent:event]; 
    NSLog(@"touchesCancelled occured"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    NSLog(@"A tap was detected on KRTableView"); 
} 

@end 

Wie kann ich erkennen, wenn der UITableView wird Scrollen nach oben oder nach unten?

Antwort

142

Sie müssen die Ereignismethoden nicht abfangen. Überprüfen Sie die Dokumentation für das UIScrollViewDelegate-Protokoll und implementieren Sie die für Ihre Situation geeigneten Methoden -scrollViewDidScroll: oder -scrollViewWillBeginDragging:.

+0

viewDidScroll wird so lange genannt halten wird, wie Sie scrollen. Sie können also Ihre Variable isDragging nicht auf scrollViewDidScroll setzen. –

+0

IST ES MÖGLICH, ZWISCHEN ROLLEN NACH OBEN ODER NACH UNTEN ZU UNTERSCHEIDEN? – Markus

+0

@Markus https://stackoverflow.com/questions/2543670/finding-the-direction-of-scrolling-in-a-uiscrollview – tdios

38

Ich möchte folgendes hinzuzufügen:

Wenn Sie mit einem UITableView arbeiten ist es wahrscheinlich, dass Sie bereits die UITableViewDelegate implementieren die Tabelle mit Daten zu füllen.

Das Protokoll UITableViewDelegate entspricht UIScrollViewDelegate, so alles, was Sie tun müssen, ist die Methoden -scrollViewWillBeginDragging und -scrollViewDidScroll direkt in Ihrer UITableViewDelegate Umsetzung zu implementieren und sie werden automatisch aufgerufen werden, wenn die Implementierungsklasse als Delegierter auf Ihre UITableView festgelegt ist.

Wenn Sie auch Klicks in Ihrer Tabelle abfangen und nicht nur ziehen und scrollen möchten, können Sie Ihre eigene UITableViewCell erweitern und implementieren und die touchsBegan: Methoden darin verwenden. Durch die Kombination dieser beiden Methoden sollten Sie in der Lage sein, die meisten Dinge zu tun, die Sie benötigen, wenn der Benutzer mit dem UITableView interagiert.

1

Es war mein Fehler, ich habe versucht, die Methode aufzurufen, bevor ich die Tabellenansicht neu geladen habe. Der folgende Code hat mir geholfen, dieses Problem zu lösen.

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Verwandte Themen