ios - UITableview reloaddata con animación
(9)
Tengo una UItableview que se llena desde una matriz y una lista desplegable. Si selecciono cualquier fila de la lista desplegable, la matriz se insertará con nuevos valores y TableView debería volver a cargarse. ¿Cómo animar la tabla vista con los nuevos contenidos de la matriz? gracias por adelantado
animación como quiero mostrar la fila uno por uno. probé este método
- (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];
}
El método siguiente es compatible con tableView para animación:
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
Uso:
//Reload tableView with animation
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight];
Los diferentes tipos de animación disponibles son:
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 };
Espero que esto pueda ayudar!
En Swift 3 puede simplemente agregar la siguiente extension
a UITableView
:
extension UITableView {
func reloadData(with animation: UITableViewRowAnimation) {
reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation)
}
}
Intente animar durante la transición Cambio de una vista al volver a cargar UITableView
[UIView transitionWithView:_yourTableView
duration:0.40f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^(void) {[_yourTableView reloadData];}
completion:nil];
Lo he intentado y mi Table
está Animated
con animación suave
// Pon este código donde quieras volver a cargar tu vista de tabla
dispatch_async(dispatch_get_main_queue(), ^{
[UIView transitionWithView:<"TableName">
duration:0.1f
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^(void) {
[<"TableName"> reloadData];
} completion:NULL];
});
Para agregar a la respuesta correcta, si desea volver a cargar todas las secciones en su UITableView
, deberá hacer lo siguiente:
ObjC
NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];
Rápido
let range = NSMakeRange(0, self.tableView.numberOfSections)
let sections = NSIndexSet(indexesIn: range)
self.tableView.reloadSections(sections as IndexSet, with: .automatic)
Esto volverá a cargar todo en la vista de tabla con una animación. Como un jefe.
Primero le dice a tableView que espere actualizaciones con beginUpdates
. Luego actualice las secciones relevantes (si su tablaView tiene solo una sección, simplemente pase el cero para el número de sección). Aquí es donde especificas la animación: puedes jugar con ella para obtener el efecto que deseas. Después de eso llamas a endUpdates
en tableView. El typedef para UITableViewRowAnimation especifica:
typedef enum {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,
UITableViewRowAnimationMiddle,
UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;
Juega para ver cuál quieres. Incluso seleccionando UITableViewRowAnimationNone
puede tener un buen efecto a veces. Código de actualización de la tabla a continuación:
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
puede usar reloadSections:withRowAnimation:
functions. Verifique la referencia de clase UITableView .
Comprueba este reloadData con Animación que ya respondió tu pregunta.
usa este método,
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
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)
Fui con esto en Swift