2008-11-21 16 views
16

Ich möchte die Scroll-Position eines UITableView vollständig zurücksetzen, so dass jedes Mal, wenn ich es öffne, die obersten Elemente angezeigt werden. Mit anderen Worten, ich möchte die Tabellenansicht bei jedem Öffnen nach oben scrollen.Wie setze ich die Scroll-Position eines UITableView zurück?

ich das folgende Stück Code versucht, mit, aber es sieht aus wie ich die Dokumentation falsch verstanden:

hier
- (void)viewWillAppear:(BOOL)animated { 
    [tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

Ist dies der falsche Ansatz?

Antwort

33

August bekam die UITableView-spezifische Methode. Eine andere Möglichkeit, es zu tun ist:

[tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 

Diese Methode in UIScrollView definiert ist, der übergeordneten Klasse zu UITableView. Das obige Beispiel sagt, dass es bei 0,0 in die 1x1-Box scrollen soll - mit anderen Worten, die obere linke Ecke.

+1

Dies ist eigentlich eine ziemlich nette Art, es zu tun, weil Sie sich keine Gedanken darüber machen müssen, ob Ihr Tisch leer ist oder nicht. Ich hatte einen ekligen Absturz zu NSIndexPath (0,0), als keine Datensätze angezeigt wurden. –

+0

Danke !!! Toller Tipp! – quantum

6

Die von Ihnen verwendete Methode scrollt (wie der Methodenname angibt) zur nächsten ausgewählten Zeile. In vielen Fällen wird dies nicht die oberste Zeile sein. Stattdessen möchten Sie entweder

scrollToRowAtIndexPath:atScrollPosition:animated: 

oder

selectRowAtIndexPath:animated:scrollPosition: 

, wo Sie den Indexpfad zu der Zeile, die Sie bewegen wollen verwenden verwenden. Die zweite Methode wählt tatsächlich eine Zeile aus, die erste Methode scrollt einfach dorthin.

+0

Diese funktionierten nicht für mich mit iOS 4.0 beim Start einer Animationssequenz. Ich musste scrollRectToVisible verwenden: animated: – chrish

Verwandte Themen