xcassets asset ios uitableview imageview assets

ios - xcassets - image asset generator



La imagen de la celda en UITableView no aparece hasta que se seleccione (8)

Creo que en este caso estás usando una UITableViewCell definida por iOS (y no una personalizada), que es una de esas celdas que obtienes de "initWithStyle: reuseIdentifier:". Ahora estas celdas están construidas internamente de tal forma que si no asigna algún contenido inmediatamente, la subvista correspondiente no se agregará a la jerarquía contentView de la celda. Este tipo de comportamiento es típico de vistas personalizadas complejas, donde el diseño final de la celda se puede determinar solo cuando todas sus subvistas tengan su contenido completamente especificado. (Por ejemplo, tiene dos etiquetas, digamos etiqueta A y etiqueta B, etiqueta A es multirruta y desea agregar la etiqueta B inmediatamente debajo de la etiqueta A, luego puede colocar la etiqueta B correctamente solo una vez que tenga la etiqueta: contenido A y calcula su altura). Entonces, supongo que las celdas integradas de la tabla iOS se hacen de la misma manera y la jerarquía de subvistas se construye en la etapa "layoutSubviews".

En tu caso, creas la celda pero difieres el tiempo de entrega de la imagen. ¡Pero en este momento el layoutSubviews ha sido llamado todavía y sin ninguna imagen el imageView correspondiente ni siquiera se asigna y se agrega en la jerarquía de contentView!

Entonces, según yo, la solución para usted es solo asignar inmediatamente un "marcador de posición" para su activo (el marcador de posición puede ser una imagen transparente del curso) que le garantizará la creación interna de UIImageView. Tenga cuidado con el tamaño de la imagen, debe estar cerca del tamaño de imagen esperado, por la misma razón explicada anteriormente. Tan pronto como se llame al bloque de acabado, la vista de la imagen ya debe estar allí y aparecerá la imagen.

La razón por la que al tocar sobre la celda aparece la imagen, se debe al hecho de que esta operación vuelve a llamar a layoutSubviews. En este caso, probablemente todo el código se vuelva a ejecutar y, como ya lo llamó "setImage:", entonces se establece la propiedad de "imagen" interna y la jerarquía de contentView se reconstruirá con la nueva imagen.

Otra posible solución a su problema es, por supuesto, utilizar una UITableViewCell "personalizada" (por ejemplo, cargada desde un Nib). En tal caso, todas sus subvistas se cargarán y usted simplemente tendrá acceso a UIImageView usando su etiqueta (lea los documentos de Apple para conocer más acerca de esta útil técnica para crear celdas de vista de tabla a partir de un archivo Nib).

  1. Aquí hay un video del problema: http://youtu.be/Jid0PO2HgcU

  2. Tengo un problema cuando intento establecer la imagen para [cell imageView] en una UITableView de la biblioteca de activos.

La imagen está cargada, pero no aparece en la celda hasta que toco (seleccione) esa celda. Aquí está mi código que establece el imageView de la celda:

//Start loading the image using the image path NSString *path = [occasion imagePath]; if (path != nil && [path hasPrefix:@"ass"]) { NSLog(@"photo loaded from assets library"); //testing ALAssestLibrary ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init]; ALAssetsLibraryAssetForURLResultBlock resultsBlock = ^(ALAsset *asset) { ALAssetRepresentation *representation = [asset defaultRepresentation]; CGImageRef imageRef = [representation fullResolutionImage]; UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; [[cell imageView] setImage:[image imageByScalingAndCroppingForSize:CGSizeMake(36.0, 42.0)]]; [image release]; }; ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error){ NSLog(@"FAILED! due to error in domain %@ with error code %d", error.domain, error.code); // This sample will abort since a shipping product MUST do something besides logging a // message. A real app needs to inform the user appropriately. abort(); }; //Convert path to an NSUrl NSURL *url = [NSURL URLWithString:path]; // Get the asset for the asset URL to create a screen image. [assetsLibrary assetForURL:url resultBlock:resultsBlock failureBlock:failureBlock]; // Release the assets library now that we are done with it. [assetsLibrary release]; }

El código anterior es parte de:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

¿Algunas ideas?


En algún momento ocurre cuando está utilizando UITableViewCell personalizado con etiquetas, imágenes, etc. pero también en algún lugar está configurando UILabel de celda por defecto. por ejemplo

customCell.textLabel.text = @"some text"

Para resolver este problema, evite usar etiquetas predeterminadas, en su lugar agregue su propio UILabel en su celda personalizada.


En mi caso, estaba configurando un prototipo de celda a través de Storyboard, pero accidentalmente estaba usando el método dequeueCellWithIdentifier:forIndexPath lugar de dequeueCellWithIdentifier:

El primer método solo se debe utilizar al asignar celdas a una vista de tabla mediante los métodos programáticos UITableView registerClass:forReuseIdentifier: o registerNib:forReuseIdentifier .


Esta es mi manera de resolver este problema, sé que no es el mejor, pero ese es el trabajo :)

UIImage *thumbnailImage = ... dispatch_async(dispatch_get_main_queue(), ^{ [cell.imageView setImage:thumbnailImage]; UITableViewCellSelectionStyle selectionStyle = cell.selectionStyle; cell.selectionStyle = UITableViewCellSelectionStyleNone; [cell setSelected:YES]; [cell setSelected:NO]; cell.selectionStyle = selectionStyle; });


Estaba teniendo un problema similar. Había registrado la clase UITableViewCell predeterminada en lugar de mi clase personalizada.

Tenía esto:

tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: visibilityCellIdentifier)

pero debería haber tenido esto:

tableView.registerClass(VisibilityCell.self, forCellReuseIdentifier: visibilityCellIdentifier)

La creación de la celda parecía estar funcionando cuando pasé por el depurador, pero no apareció nada hasta que seleccioné cada fila.


Me rasqué la cabeza por tanto tiempo y finalmente lo descubrí.

Mi error fue que estaba configurando una imagen en cell.imageView cuando debería establecer mi salida actual cell.eventImageView . Estaba jugando con la vista de imagen genérica proporcionada en UITableViewCell . Espero que ayude a alguien.


Obtengo el mismo problema cuando uso este código:

cell = [tableView dequeueReusableCellWithIdentifier:kCellSection1 forIndexPath:indexPath]; if (indexPath.row == 0) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellSection1]; cell.textLabel.text = @"Vote Up for me if it help for you!"; }

Pero lo soluciono por reemplazo:

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellSection1];

A:

cell = [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellSection1];


necesitas diseñar la celda después del conjunto de imágenes

al igual que

[cell setNeedsLayout];