2016-06-03 14 views
2

Diese coole expanding tableView funktioniert gut, aber wenn Sie einige der Zeilen auswählen, tritt eine seltsame Animation.Seltsame tableView Zeile/Abschnitt Animation, wenn Zeile ausgewählt ist

Die Tabelle hat mehrere Abschnitte und jede Zeile kann zusätzliche Zeilen anzeigen, wenn sie angeklickt wird. Das Aussehen und Verhalten der Zeile ist in einer Tabelle unter Verwendung verschiedener Werte strukturiert, z. Wenn die boolesche "isExpandable" -Eigenschaft einer Zeile im plist auf "true" gesetzt ist und ihre "additionalRows" -Eigenschaft auf 2 gesetzt ist, kann die Zeile so erweitert werden, dass 2 Unterzeilen angezeigt werden.

Das Problem mit dem Tisch ist, dass, wenn die erste Zelle in jedem Abschnitt angeklickt wird, die Animation läuft gut, aber wenn andere Zellen angeklickt werden, sie mische: -

enter image description here

ich das seltsame vermuten Animation geschieht, weil alle Abschnitte neu geladen werden, wenn eine Zelle wegen dieser Linie unter DidSelectRowAtIndexPath in der Viewcontroller Datei geklickt wird: -

tbl.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: .Automatic) 

ich habe versucht, die folgenden aber sie entweder Absturz der ap p oder die Zellen dazu führen, nicht zu erweitern: -

  • Einstellen der Animation Methode
  • Mit reload statt
  • Speichern der indexPaths des SelectedRow und seine Unterzeilen .None und dann neu zu laden alle mit reloadIndexPaths
  • Speicher die Reihen der ausgewählten Zelle und seine Subzellen sie dann einmal neu geladen, wenn eine Zeile

Jemand auf der tatsächlichen Website geklickt wird, dass der Code auf vorgeschlagene Verwendung insertRows gebucht AtIndexPath und deleteRowsAtIndexPath anstelle von reloadSection, aber ich bin nicht sicher, wie es geht. Ihre Hilfe wird gerne in Anspruch genommen.

EDIT - auch versucht insertRowsAtIndexPath und deleteRowsAtIndexPath aber es scheint, mit der Art und Weise des Tableview-Modell und den App-Abstürzen gesetzt in Konflikt auf.

Antwort

0

Das Einfügen von Zeilen in die Tabelle sollte Ihnen bei konsistenteren Tabellenansichtsanimationsverhalten helfen.

Um Zeilen bei bestimmten Indexpfaden einzufügen, können Sie die Methode 'insertRowsAtIndexPaths' verwenden. Sie müssen jeden einzufügenden Indexpfad generieren und dann an die Methode in einem Array übergeben.

ObjC:

NSArray* arr = your NSIndex Paths...; 

[tableView insertRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationFade]; 

Swift:

table.insertRowsAtIndexPaths([IndexPaths..], withRowAnimation: .Automatic) 

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/occ/instm/UITableView/insertRowsAtIndexPaths:withRowAnimation:

0

Hier ist das Problem: reloadSections(..) macht die tableView bequem alle die neuesten Daten aus dem Modell holen (für die spezifizierte (n) Abschnitt (e)) auf Kosten von "vage" Animationen. Verwenden Sie insertRowsAtIndexPaths(..) mit dem Animationsformat .Top für das Verhalten, das Sie suchen. Wenn Sie Probleme mit Ihrem Datenmodell haben, beheben Sie das zuerst (weil es Sie wahrscheinlich später stören wird).

Verwandte Themen