Ich habe eine, UITableView
die aus Array und eine Dropdown-Liste gefüllt ist.
Wenn ich eine Zeile der Dropdown-Liste auswähle, wird das Array mit neuen Werten eingefügt und die Tabellenansicht sollte neu geladen werden.
Wie animiere ich die Tabellenansicht mit neuen Array-Inhalten?
Animation wie ich die Reihe einzeln zeigen möchte. Ich habe diese Methode ausprobiert
- (void)reloadRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation {
NSIndexPath rowToReload = [NSIndexPath indexPathForRow:[names count] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[tableDetails reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
}
ios
uitableview
reloaddata
Naveen Pathiyil
quelle
quelle
Antworten:
Um zur richtigen Antwort hinzuzufügen, müssen Sie Folgendes tun , wenn Sie alle Abschnitte in Ihrem neu laden möchten
UITableView
:ObjC
NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]); NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range]; [self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];
Schnell
let range = NSMakeRange(0, self.tableView.numberOfSections) let sections = NSIndexSet(indexesIn: range) self.tableView.reloadSections(sections as IndexSet, with: .automatic)
Dadurch wird alles in der Tabellenansicht mit einer Animation neu geladen. Wie ein Chef.
quelle
[self.tableView numberOfSections] == [self numberOfSectionsInTableView:self.tableView]
sonst rufe ich einfach an[self.tableView reloadData]
Swift 5:
UIView.transition(with: tableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.tableView.reloadData()}, completion: nil)
Swift 3
UIView.transition(with: myTableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)
Swift 2
UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)
Ich ging damit in Swift
quelle
Verwenden Sie diese Methode,
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
quelle
Sie weisen die tableView zunächst an, Aktualisierungen mit zu erwarten
beginUpdates
. Aktualisieren Sie dann die relevanten Abschnitte (wenn Ihre tableView nur einen Abschnitt enthält, übergeben Sie einfach Null für die Abschnittsnummer). Hier legen Sie die Animation fest - Sie können damit herumspielen, um den gewünschten Effekt zu erzielen. Danach rufen SieendUpdates
die tableView auf. Das typedef für UITableViewRowAnimation gibt Folgendes an:typedef enum { UITableViewRowAnimationFade, UITableViewRowAnimationRight, UITableViewRowAnimationLeft, UITableViewRowAnimationTop, UITableViewRowAnimationBottom, UITableViewRowAnimationNone, UITableViewRowAnimationMiddle, UITableViewRowAnimationAutomatic = 100 } UITableViewRowAnimation;
Spielen Sie herum, um zu sehen, welche Sie wollen. Sogar die Auswahl
UITableViewRowAnimationNone
kann manchmal einen schönen Effekt haben. Tabellenaktualisierungscode unten:[self.tableView beginUpdates]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates];
quelle
In Swift 3 können Sie einfach Folgendes hinzufügen
extension
zuUITableView
:extension UITableView { func reloadData(with animation: UITableView.RowAnimation) { reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation) } }
quelle
Sie können
reloadSections:withRowAnimation:
Funktionen verwenden. Überprüfen Sie die UITableView-Klassenreferenz .Überprüfen Sie diese reloadData mit Animation, die Ihre Frage bereits beantwortet hat.
quelle
didselectrow
Die folgende Methode wird von tableView für Animationen unterstützt:
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
Verwendung :
//Reload tableView with animation [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight];
Verschiedene Arten von Animationen sind verfügbar:
typedef NS_ENUM(NSInteger, UITableViewRowAnimation) { UITableViewRowAnimationFade, UITableViewRowAnimationRight, // slide in from right (or out to right) UITableViewRowAnimationLeft, UITableViewRowAnimationTop, UITableViewRowAnimationBottom, UITableViewRowAnimationNone, // available in iOS 3.0 UITableViewRowAnimationMiddle, // available in iOS 3.2. attempts to keep cell centered in the space it will/did occupy UITableViewRowAnimationAutomatic = 100 // available in iOS 5.0. chooses an appropriate animation style for you };
Hoffe das könnte helfen!
quelle
Ich habe es versucht und meine
Table
istAnimated
mit flüssiger Animation// Platzieren Sie diesen Code dort, wo Sie Ihre Tabellenansicht neu laden möchten
dispatch_async(dispatch_get_main_queue(), ^{ [UIView transitionWithView:<"TableName"> duration:0.1f options:UIViewAnimationOptionTransitionFlipFromRight animations:^(void) { [<"TableName"> reloadData]; } completion:NULL]; });
quelle
Versuchen Sie, während des Übergangs zu animieren. Ändern Sie eine Ansicht, während Sie UITableView neu laden
[UIView transitionWithView:_yourTableView duration:0.40f options:UIViewAnimationOptionTransitionCrossDissolve animations:^(void) {[_yourTableView reloadData];} completion:nil];
quelle
Swift 5:
let section = 0 tableView.reloadSections([section], with: .automatic)
quelle