2009-12-14 17 views
5

Powiel możliwe:
Can you animate a height change on a UITableViewCell when selected?wysokość Animacja UITableViewCell na wybór

Robiłem dużo Googling aby spróbować zorientować się w prawidłowy sposób to zrobić, a tak daleko Jestem w rozterce.

Mam subklasy UITableViewCell z mojego własnego widoku i próbuję animować wysokość UITableViewCell, aby rozwinąć, gdy jest wybrany, i umowy, gdy zostanie wybrany ponownie. Ta tabela może potencjalnie zawierać tysiące wierszy, więc nie chcę przesłonić wysokości tableViewForRowAtIndexPath. Idealnie chciałbym móc mieć więcej niż jedną komórkę rozszerzoną na raz, ale to nie jest tak istotne. Jaki jest najlepszy sposób na zrobienie tego?

Dziękuję Justin

Odpowiedz

6

Nie ma inny mechanizm określania wysokości komórek niż heightForRowAtIndexPath. O ile nie będziesz właściwie rozliczał rozszerzonej komórki w tej metodzie, będziesz szukał innych komórek, które się nad nią przeszukują lub ukryją pod nią. Od kodu z głową kości, gdzie zapomniałem ustawić heightForRowAtIndexPath, jestem prawie pewien, że inne komórki będą wyświetlane nad nim.

Ponieważ mówimy o tysiącach wierszy, zakładamy, że użytkownik nie może zmienić układu komórek.

Co można zrobić, to zapisać ścieżkę indeksu rozszerzonej komórki, gdy użytkownik dotknie danej komórki. Następnie heightForRowAtIndexPath może wyglądać następująco:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

if ([indexPath isEqual:lastSelectedIndexPath]) 
{ 
    return 80; 
} 

else { 
    return 44; 
} 

} 

Jeśli naprawdę chcesz wybrać więcej, można przechowywać w odpowiednich ścieżek indeksu do tablicy i sprawdzić dla nich tak:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

CGFloat cellHeight = 44; 

for (NSIndexPath *expandedIndexPath in expandedIndexPathsArray) 
{ 
    if ([indexPath compare:expandedIndexPath] == NSOrderedSame) 
    { 
     cellHeight = 80; 
     break; 
    } 
} 

return cellHeight; 

} 

Pierwsze animację patrz w prawo, zajmie trochę pracy. Od jakiegoś czasu bawiłem się z tym konkretnym pomysłem na UI i nigdy nie mogłem zmusić się, by usiąść i naprawdę to zrobić. Jedną z rzeczy, którą możesz zrobić, to wyświetlać sztuczny widok, który animuje się podczas aktualizowania widoku tabeli za nim.

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation 

może być interesujące dla tego, jak może być w stanie korzystać z animacji komórkowych do symulacji ruchu z poniższych komórek, aby pomieścić swoją ekspansję.

Jeśli możesz zrezygnować z animowania klatki komórki, możesz utworzyć animację krycia rozszerzonych danych po ustawieniu nowej wysokości.

To jest trudne, ale jeśli sprawi, że będzie działać, założę się, że będzie całkiem fajnie. Powodzenia.

+1

Dzięki Danilo, zacząłeś na właściwej drodze. Skończyło się na tym, że działało, używając reloadRowsAtIndexPaths wewnątrz didSelectRowAtIndexPath. Sprawdzam, czy komórka jest rozwinięta i ustawi odpowiednią wysokość w wysokościForRowAtIndexPath, tak jak wspomniałeś. Dzięki jeszcze raz! – Justin

+1

Zbyt fajne! Cieszę się, że mogę ci pomóc. Mam nadzieję, że to się uda. Może w końcu spróbuję samemu. –

+1

'[indexPath compare: expandedIndexPath] == NSOrderedSame' powinno być zapisane jako' [indexPath isEqual: expandedIndexPath] – user102008

Powiązane problemy