Siempre que llamoreloadRowsAtIndexPaths Calling elimina tableView contentOffset
reloadRowsAtIndexPaths
Mi UITableView contentOffset se retira, ¿existe un método delegado que puedo utilizar para atrapar la vista de tabla de actualización y establecer el offset de nuevo de modo que permanezca en su lugar y no anima a la vista, o simplemente evita que lo haga?
estoy fijando la contentOffest en viewDidLoad:
Aquí es un ejemplo de uso:
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[params valueForKey:@"index"], nil] withRowAnimation:UITableViewRowAnimationFade];
Que elimina la contentOffset y la anima a la vista, lo que no quiero.
Más específicamente, esto parece ocurrir cuando la fila que se está recargando está en indexPath.section 0 y indexPath.row 0, es decir, la fila superior.
Más información
Estoy llamando reloadRowsAtIndexPaths después de una solicitud asincrónica a buscar una imagen de un servidor. Básicamente funciona así:
- cellForRowAtIndexPath se llama el que comprueba la presencia del archivo pulgar en el disco, si el archivo no está presente se carga un marcador de posición en su lugar y una solicitud asincrónica se inicia en un fondo hilo para recuperar la imagen.
- Cuando la descarga de la imagen se ha completado, llamo al
reloadRowsAtIndexPaths
para obtener la celda correcta, de modo que la imagen correcta se desvanezca en lugar de la imagen del marcador de posición. - La cantidad de células puede ser diferente que la solicitud se llama el interior cellForRowAtIndexPath para que las imágenes se cargan en la medida que la carga células
comprobación del archivo cellForRowAtIndexPath
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_small.gif",[[listItems objectAtIndex:indexPath.row] valueForKey:@"slug"]]];
if([[NSFileManager defaultManager] fileExistsAtPath:path]){
listCell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:path]];
} else {
listCell.imageView.image = [UIImage imageNamed:@"small_placeholder.gif"];
NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[[[listItems objectAtIndex:indexPath.row] valueForKey:@"image"] valueForKey:@"small"],@"image",[NSString stringWithFormat:@"%@_small.gif",[[listItems objectAtIndex:indexPath.row] valueForKey:@"slug"]], @"name",indexPath,@"index",@"listFileComplete",@"notification",nil];
[NSThread detachNewThreadSelector:@selector(loadImages:) toTarget:self withObject:params];
[params release];
}
Archivo donwloaded notificación:
-(void)fileComplete:(NSNotification *)notification {
[self performSelectorOnMainThread:@selector(reloadMainThread:) withObject:[notification userInfo] waitUntilDone:NO];
}
recarga celular (He hardcoded secciones debido a un error con los números de sección extraños que se pasa muy raramente causar un accidente:
-(void)reloadMainThread:(NSDictionary *)params {
NSIndexPath *index;
switch ([[params valueForKey:@"index"] section]) {
case 0:
index = [NSIndexPath indexPathForRow:[[params valueForKey:@"index"] row] inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[params valueForKey:@"index"], nil] withRowAnimation:UITableViewRowAnimationNone];
break;
default:
index = [NSIndexPath indexPathForRow:[[params valueForKey:@"index"] row] inSection:2];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:index,nil] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
Gracias por la sugerencia, supongo que mi problema es con reloadRowsAtIndexPaths y no beginUpdates ya que el problema todavía existe con begin/end eliminado – Alex
Editado; Puede que haya entendido mal el aspecto del resto del código. –
He actualizado mi pregunta para dar más información sobre mi problema – Alex