Die Zelle imageView in UITableView wird erst angezeigt, wenn sie ausgewählt ist
- Hier ist ein video von dem problem: http://youtu.be/Jid0PO2HgcU
- Ich habe ein problem, wenn Sie versuchen, um das Bild für den [Zelle Bildansicht] in einer UITableView aus der asset-Bibliothek.
Das Bild wird geladen, aber es erscheint nicht in der Zelle, bis ich touch (wählen Sie), die Zelle. Hier ist mein code, der legt die Bildansicht der Zelle:
//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];
}
Dem obigen code ist Teil der:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
Irgendwelche Ideen?
InformationsquelleAutor der Frage Ali | 2012-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, in diesem Fall bist du mit einem iOS definiert UITableViewCell (und nicht selbst eine), dass ist eine dieser Zellen ist, dass Sie aus der "initWithStyle:reuseIdentifier:". Nun, diese Zellen sind intern gebaut in solcher Weise, dass wenn Sie nicht zuordnen, einige Inhalte werden sofort die entsprechenden Untersicht nicht Hinzugefügt werden, in der Zelle contentView Hierarchie. Diese Art von Verhalten ist typisch für komplexe benutzerdefinierte Ansichten, wo die Letzte Zelle layout bestimmt werden kann nur, wenn alle seine subviews haben, die Ihre Inhalte vollständig angegeben. (E. g. Sie haben zwei Bezeichnungen, lassen Sie uns sagen, label A und label B label A ist diese und, die Sie hinzufügen möchten-label-B unmittelbar unterhalb label-Ein, dann kann man label-B richtig Sie nur, wenn Sie den label-Inhalten und berechnen Sie die Höhe.). Also ich nehme an, die eingebauten iOS Tabelle-Zellen erfolgt in der gleichen Art und Weise und die Untersichten Hierarchie gebaut wird "layoutSubviews" Bühne.
In Ihrem Fall erstellen Sie die Zelle jedoch verzögern die Zeit, die das Bild zur Verfügung gestellt. Aber an diesem Punkt der layoutSubviews aufgerufen wurde und noch ohne Bild die entsprechende Bildansicht ist auch nicht zugewiesen, und Hinzugefügt, in der contentView-Hierarchie!
So, nach mir, die Lösung für Sie ist nur zu vergeben, sofort ein "Platzhalter" für Ihr Kapital (die Platzhalter werden kann, wird ein transparentes Bild natürlich), die gewährleisten, dass Sie von der internen UIImageView Schöpfung. Seien Sie vorsichtig mit der Größe des Bildes, es sollte in der Nähe der zu erwartenden Bild-Größe, aus dem gleichen Grund oben erklärt. Sobald Ihr fertig-Baustein aufgerufen wird das Bild anzeigen sollte es schon sein, und das Bild wird angezeigt.
Der Grund, warum, wenn Sie Tippen Sie auf die Zelle, die das Bild angezeigt wird, ist aufgrund der Tatsache, dass diese operation ruft die layoutSubviews wieder. In diesem Fall wird der ganze code ist wahrscheinlich erneut ausgeführt und wie Sie bereits als "setImage:" bevor dann die interne "Bild" - Eigenschaft festgelegt ist und die contentView Hierarchie wird neu aufgebaut mit dem neuen image.
Einer anderen Lösung zu deinem problem ist natürlich die Verwendung eines "custom" UITableViewCell (z.B. geladen von einer Feder). In einem solchen Fall alle Ihre Untersichten werden geladen, und Sie werden einfach Zugang zu den UIImageView mit his-tag (gelesen apple docs zu wissen, mehr über diese nützliche Technik, um die create table-Ansicht die Zellen aus einer Nib-Datei).
InformationsquelleAutor der Antwort viggio24
müssen Sie die layout-Zelle nach Bild gesetzt
genau wie
InformationsquelleAutor der Antwort ibcker
Ich kratzte mich am Kopf, so lange und schließlich fand es heraus.
Mein Fehler war, dass ich die Einstellung Bild in
cell.imageView
wenn ich sollte meine Einstellung eigentliche Steckdosecell.eventImageView
. Es Durcheinander mit den generischen Bildansicht inUITableViewCell
. Hoffe, es hilft jemandem.InformationsquelleAutor der Antwort atulkhatri
Dies ist mein Weg, wie ich zu gelöst diese problem, ich weiß ist nicht die beste, aber, dass die Arbeit 🙂
InformationsquelleAutor der Antwort Jan Timar
In meinem Fall habe ich die Einstellung wurde eine Prototyp-Zelle durch ein Storyboard, wurde aber versehentlich mit der
dequeueCellWithIdentifier:forIndexPath
Methode stattdequeueCellWithIdentifier:
.Die erste Methode wird nur eingesetzt, wenn sich Zellen eines tableviews durch die programmgesteuerte UITableView
registerClass:forReuseIdentifier:
oderregisterNib:forReuseIdentifier
Methoden.InformationsquelleAutor der Antwort Yerk
Ich hatte ein ähnliches problem. Ich hatte registriert, die Standard-UITableViewCell Klasse statt meine eigene Klasse.
Hatte ich dieses:
aber ich habe dieses:
Die Zellbildung alle schauten zu arbeiten, als ich trat durch den debugger, aber nichts auftauchte, bis ich jeweils gewählten Zeile.
InformationsquelleAutor der Antwort HalR
Irgendwann ist es passiert, wenn Sie benutzerdefinierte
UITableViewCell
mit Beschriftungen, Bilder etc, aber auch irgendwo Sie sind festlegen von Standard-UILabel der Zelle. zum BeispielUm dieses problem zu lösen, vermeiden Sie die Verwendung von Standard-label, stattdessen fügen Sie Ihre eigenen UILabel in Ihrer benutzerdefinierten Zelle.
InformationsquelleAutor der Antwort MrWaqasAhmed
Bekomme ich dasselbe Problem wenn ich diesen code verwenden:
Aber ich es beheben durch ersetzen:
:
InformationsquelleAutor der Antwort Tà Truhoada