/ / Existuje nejaká metóda ako tableViewWillEndDisplayingCell v iOS pre UITableViewDelegate? - ios, objektív-c, uitableview, bunka

Existuje nejaká metóda ako tableViewWillEndDisplayingCell v systéme iOS pre UITableViewDelegate? - ios, objektív-c, uitableview, bunka

Pred zmiznutím by som chcel v aplikácii pre iPhone vyblednúť zobrazenie buniek v tabuľke. Keď sa má objaviť, používam

- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath

na zmenu alfa z nuly na 1 pri animácii 0,3 sekundy.

Chcel by som to isté, ale od 1 do 0, keď sa má stratiť. Je to nejaká metóda podobná metóde vyššie alebo ako inak to môžem urobiť?

Nechcem používať štandardné iOS UITableViewRowAnimationFade pretože pri načítavaní tabuľky nechcem žiadne ďalšie prechody.

EDIT: Preberám obsah zobrazenia tabuľky. Povedzme, že mám tlačidlo, na ktoré kliknem a znova načíta údaje v mojej tabuľke. To je, keď chcem vyblednúť existujúce bunky a vyblednúť nové.

Ovládač, ktorý používam, je základný UIViewController vykonávacie UITableViewDataSource UITableViewDelegate UIScrollViewDelegate protokoly.

odpovede:

2 pre odpoveď č. 1

Našiel som riešenie.

Tesne pred volaním [self.tableView reloadData] Animujem všetky viditeľné bunky, aby vybledli. Dostanem všetky viditeľné bunky a opakujem ich

for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows])
{
// here I animate cells to fade out
}

(ďakujem @AlexKoren za to, že mi ukázal cestu k iterácii cez viditeľné bunky).

Pretože som používal [self.tableView reloadData] bez akejkoľvek ďalšej vstavanej animácie pre iOS bunky jednoducho zmizli. Takže teraz miznú najskôr a potom moje nové bunky miznú s animáciou definovanou v

- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath

dôležitý: Po dokončení animácie načítam zobrazenie tabuľky. Keby som volal [self.tableView reloadData] hneď po iterácii cez bunky načíta tabuľku pred zobrazením animácie. Pretože viem, ako dlho trvá dokončenie animácie, ktorú používam

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
{
[self.tableView reloadData];
});

s delay vypočítané predtým.


1 pre odpoveď č. 2

Toto je trochu hack, ale malo by to fungovať:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//loop through visible indexPaths
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows]) {
//get each cell
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
//get its location
CGRect rectInTableView = [self.tableView rectForRowAtIndexPath:indexPath];
//set its alpha based on whether or not its going off the screen at the top.
cell.alpha = 1 + rectInTableView.origin.y / rectInTableView.size.height;
}

}

0 pre odpoveď č. 3

Už ste to vyskúšali?

- (void)tableView:(UITableView *)tableView
didEndDisplayingCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath

Myslím, že to je to, čo chcete.