2010-06-28 5 views
9

Ich möchte eine Tabelle anzeigen, die mehrere Abschnitte hat und zunächst nur 3 Elemente von Abschnitten angezeigt werden. Wenn der Benutzer auf die Abschnittsfußzeile tippt, geht die Abschnittsfußzeile verloren (wird zu Null) und alle Elemente dieses Abschnitts werden dem Benutzer angezeigt.Initially sichtbare Zellen wird unsichtbar nach dem Aufruf von reloadSections: withRowAnimation: Methode

Aus diesem Grund, wenn der Benutzer den Abschnitt Fußzeile tippt, nenne ich unten Code:

-(void)loadMoreRowsInSection:(NSInteger)section { 
    [groupStates replaceObjectAtIndex:section withObject:[NSNumber numberWithBool:YES]]; 
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:NO]; 
} 

Ich habe den folgenden Code-Abschnitt Fußzeile zeigen oder nicht:

-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    int count = [[(NSDictionary*)[filters objectAtIndex:section] valueForKeyPath:@"values.value"] count]; 
    if (count>3&&![[groupStates objectAtIndex:section] boolValue]) { 
     LoadMoreFooter* loadMoreFooter = [[LoadMoreFooter alloc] initWithParent:self Section:section]; 
     return [loadMoreFooter view]; 
    } 
    else return nil; 
} 

Wenn Benutzer Taps Der Abschnitt footer und die Funktion loadMoreRowsInSection werden aufgerufen, dieser Abschnitt wird neu geladen, aber die aktuellen Zeilen dieses Abschnitts werden ausgeblendet. Wenn ich nach unten blättern gehe und die Reihen aus dem Bildschirm heraus und wieder verschwinden lassen, erscheinen wieder Reihen.

Wenn ich reloadData anstelle von reloadSections:withRowAnimation: aufrufen, gibt es kein Problem, aber es scheint keine gute Idee zu sein, die gesamte Tabelle neu zu laden. Außerdem gibt es in reloadTable keine Animation.

Hat jemand dieses Problem festgestellt?

+1

Der zweite Parameter von '-reloadSections: withRowAnimation:' ist kein 'BOOL'; es ist ein 'UITableViewRowAnimation' Typ – user102008

Antwort

1

Ich hatte ein ähnliches Problem, wo die Abschnittsüberschriften hängen bleiben würden, wo immer sie waren. Obwohl mein Problem auch weiterhin besteht, wenn/off gescrollt auf dem Bildschirm:

iphone app screenshot

Nur so, wie ich gefunden haben, zu beheben ist es nur reloadDatareloadSections:withRowAnimation: statt zu verwenden.

5

Ich hatte dieses Problem auch. Ich habe stattdessen UITableViewRowAnimationNone verwendet, was den Abschnitt aus irgendeinem Grund animiert (was reloadData nicht tut), aber es zeigt es auch nach der Animation korrekt an.

4

Das Hinzufügen eines Anrufs zu reloadData nach dem Aufruf von reloadSections:withRowAnimation: scheint das verschwindende Zellenproblem zu beheben, ohne die Animation zu beeinträchtigen.

+0

Avesome Antwort :-) –

20

Dies ist eine alte Frage, aber ich denke, ich weiß, was das verursacht.

Ist das eine "statische" Zelle in dem Sinne, dass Sie selbst einen Verweis darauf haben? In diesem Fall liegt das Problem wahrscheinlich darin:

Wenn Sie einen animierten Neuladevorgang ausführen, blendet die Tabellenansicht vorhandene Zellen aus, während gleichzeitig die neuen Zellen eingeblendet werden. Das Problem ist, dass, wenn die "neue" Zelle die exakt gleiche Zelle wie die alte Zelle ist, dieselbe Zelle gleichzeitig ein- und ausblendet! Und in Ihrem Fall hat die Ausblendungsanimation Vorrang und die Zelle ist verborgen.

+0

Bingo - das ist genau das, was ich tat – Lee

+0

gute Erklärung - es half mir, den Kern des Problems zu finden ... Ich behob dieses 'statische Zellen' Problem durch Hinzufügen Dieser Code nach dem Aufruf von reloadSections mit Fade-Animation ... [UIView animateWithDuration: 0.3 Verzögerung: 0.3 Optionen: 0 Animationen:^{ self.yourCell.alpha = 1.0f; } Vervollständigung: Null]; –

0

Mein Fehler war, dass: Ich hatte eine TableView mit mehreren Abschnitten. Wenn ich einen Bereich zum Erweitern (und zum Anzeigen von Zellen) auswählte, wurden andere Bereiche darüber ausgeblendet.

Ich behandelte Header als Zellen.

Meine Lösung ohne reloadData():

innen Überschreibung func viewDidLoad() Methode, die ich diesen Code wurde mit:

tableTeams.registerNib(UINib(nibName: "header", bundle: nil), 
forCellReuseIdentifier: "HeaderCell") 

Aber ich sollte diese verwendet haben:

tableTeams.registerNib(UINib(nibName: "header", bundle: nil), 
forHeaderFooterViewReuseIdentifier: "HeaderCell") 

und innen func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?, I würde diesen Code verwenden:

func tableView(tableView: UITableView, viewForHeaderInSection section: 
Int) -> UIView? { 
     let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderCell") 
as! CustomHeaderUiView 

Ich hoffe, das hilft!

Verwandte Themen