2013-03-23 15 views
5

Ich habe einen View-Controller (lasst es MainViewContoller nennen), der 3 verschiedene Tabellen (eine nach dem anderen) enthält, kann ein Segment-Steuerelement tippen, um zwischen diesen Tabellen zu wechseln.Scrollen Sie nach oben, wenn Sie auf die Statusleiste tippen

Um diese 3 Tabellen zu präsentieren, hat MainViewContoller 3 andere View-Controller (A, B und C), jeder hat eine UITableView als Subview und handle seine eigenen Daten.
Wenn ein MainViewContoller geladen wird, initiieren sie Controller A, B und C und ihre Tableviews in den es nach Ansicht der:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ViewControllerA *vcA = [ViewControllerA alloc] init]; 
    [self.view addSubview:vcA.view]; 

    ViewControllerB *vcB = [ViewControllerB alloc] init]; 
    [self.view addSubview:vcB.view]; 

    ViewControllerC *vcC = [ViewControllerC alloc] init]; 
    [self.view addSubview:vcC.view]; 
} 

Beispiel also für, wenn der Benutzer die Segmentsteuerung tippen und A wählen, die MainViewContoller ausblenden Tabellen B und C und sichtbar machen Tabelle A. Etwas wie folgt aus:

if (userTapOnA) { 
    self.viewControllerA.tableView.hidden = NO; 
    self.viewControllerB.tableView.hidden = YES; 
    self.viewControllerC.tableView.hidden = YES; 
} 

Das Problem:

Wenn Benutzer tippen Sie auf die Statusleiste ich möchte dass die aktuelle sichtbare Tabelle nach oben scrollt.
Dieses Verhalten ist ziemlich einfach und man bekommt es kostenlos, wenn man einen normalen View-Controller benutzt, aber wie man sehen kann, ist mein View-Controller nicht regulär.
Ich nehme an, dass durch die Verwendung anderer Controller anzeigen als MainViewContoller Ansicht ich das Standardverhalten zu brechen, so dass meine MainViewContoller nicht behandelt die Statusleiste tippen.

Jemand hat eine Idee, wie man das löst?

Antwort

26

Dies ist direkt von der UIScrollView Header-Datei:

/* Wenn der Benutzer tippt auf die Statusleiste, die Scroll-Ansicht unter der Note, die am nächsten an die Statusleiste ist, wird nach oben gescrollt werden, aber nur, wenn seine scrollsToTop Eigenschaft ist JA, seine Delegierten nicht gibt NO von shouldScrollViewScrollToTop zurück, und es ist nicht bereits unter oben. Auf dem iPhone führen wir diese Geste nur aus, wenn eine Bildschirmansicht auf dem Bildschirm mit scrollsToTop == YES vorhanden ist. Wenn mehr als eins gefunden wird, wird keiner gescrollt. */

@Eigenschaft (nicht atomisch) BOOL scrollsToTop; // Standard ist JA.

Setzen Sie in diesem Fall alle scrollsToTop auf NO, mit Ausnahme desjenigen, den Sie in diesem Moment aktivieren möchten.

+0

10x, das war sehr hilfreich :) – Eyal

2

Sie sollten Ihre verschachtelten Controller als untergeordnete Controller registrieren.

Ich bin mir nicht sicher, ob dies hilft, Ihr Problem zu lösen, aber das ist der richtige Weg, es zu tun.

Verwandte Themen