2015-02-09 11 views
5

Kontekst: Używam AsyncDisplayKit do załadowania tabeli z tekstem i obrazami. Obrazy są pobierane z Internetu, a rozmiary obrazów są nieznane, dopóki obraz nie zostanie pobrany.Przekształcenie ASTableView z AsyncDisplayKit po pobraniu obrazów przy użyciu ASNetworkImageNode

Co usiłuję zrobić: Po zakończeniu pobierania obrazu, chcę ponownie rozmiar i układ komórkę, aby pomieścić na obrazie, a następnie re-size i układ tabeli w celu dostosowania dla nowa wysokość komórki.

Co zrobiłem do tej pory: początkowo zwrócić ASTableView tylko z tekstu i użyć metody delegat ASNetworkingImage, imageNode: metodę didLoadImage, aby otrzymywać powiadomienia, gdy obraz jest zakończeniu pobierania.

- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image { 

    // Scale image downloaded from Internet to fit constrained width 
    // Set networkImageNode to scaled image 
    UIImage *newimage = [self scaleImage:image toConstrainedWidth:CONSTRAINED_WIDTH]; 
    self.networkImageNode.image = newimage; 

    // Gets the parent cell 
    // Recalculate cell size and layout the cell (This works!) 
    MyAsyncTableCellNode *parentCell = ASDisplayNodeFindClass(self, [MyAsyncTableCellNode class]); 
    [parentCell invalidateCalculatedSize]; 
    [parentCell measure:CGSizeMake(CONSTRAINED_WIDTH, MAXFLOAT)]; 
    [parentCell layout]; 

    // Attempting to re-layout the table to shift the table cells 
    // to accommodate for the new cell height (ALL these do NOT work!) 
    MyAsyncTableViewController *parentTableViewController = ASDisplayNodeFindClass(self, [MyAsyncTableViewController class]); 
    // Attempt #1 
    [parentTableViewController.asyncTableView reloadData]; 

    // Attempt #2 
    [parentTableViewController.asyncTableView beginUpdates]; 
    [parentTableViewController.asyncTableView endUpdates]; 
} 

jestem w stanie z powodzeniem ponownie obliczyć wielkość pojedynczej komórki i re-układ i wyciągnąć komórkę, aby pasowały do ​​pobranego obrazu.

Issues: Jednak obok muszę ponownie DTP tabelę, aby przesunąć inne komórki w dół lub w górę, aby pasowały do ​​nowego rozmiaru zaktualizowanego komórce. TO JEST CO NIE MOŻNA DOSTAĆ DO PRACY.

Próba nr 1 spowoduje ponowne obliczenie subskrybentów tabeli i zmiany układu, ale spowoduje to również ponowne załadowanie wszystkich danych, co nie jest tym, czego chcę. Chcę po prostu ponownie obliczyć i zmienić układ komórek, a nie ponownie załadować wszystkie dane.

Próba # 2: Podczas korzystania z UITableView, spowoduje to wywołanie tableView: heightForRowAtIndexPath i ponowne rozmieszczenie wszystkich komórek tabeli, ale niestety w przypadku ASTableView spowoduje to wyjątek niezaimplementowany.

Pytanie: W jaki sposób programowo zrobić przekaźnik ASTableView się i konta dla nowych wysokości komórek?

Odpowiedz

0

Pierwsza próba powinna być poprawna, ponieważ to wywołanie ponownie metod numberOfSectionsInTableView, numberOfSectionsInTableView, nodeForRowAtIndexPath i nie powinno ponownie ładować źródła danych, chyba że zostało to określone (jako zwykły typ UITableView).

Powiązane problemy