2012-05-27 9 views
22

Normalerweise verwende ich viewDidAppear Methode, um einige UI Sachen auf der Ansicht zu tun, nachdem es fertig erschien und ich diese Methode in verschiedenen Situationen war es sehr nützlich war, aber ich muss einige UI Änderungen an einem UITableViewCell nach Es ist fertig, erscheint, gibt es eine verfügbare Methode im SDK, die einen ähnlichen Job wie viewDidAppear tut, aber für UITableViewCell?viewDidAppear für UITableViewCell

p.s. willDisplayCell funktionierte nicht in meinem Fall, ich brauche etwas wie didDisplayCell, wenn es wirklich existiert.

+0

Können Sie einige Code passieren, die verwenden .. Und was versuchst du zu erreichen ... Ie UI ändert sich in dem Sinne, welche Art von Änderungen .. Können Sie bitte etwas mehr erklären .. –

+0

Werfen Sie einen Blick auf diese Antwort dieser Frage: * benachrichtigt werden, wenn UITableView nach Daten gefragt hat? * http://stackoverflow.com/a/3060232/1028709 –

+0

Was ist der Grund, warum Sie nicht Dinge direkt in Init für Ihre Tabellenzellenunterklasse tun können? und warum funktioniert 'willDisplayCell' nicht für dich? –

Antwort

2

Die Methode viewDidLoad ist mit UIViewController und seinen Unterklassen verwandt, daher können wir diese nicht in UITableViewCell verwenden, das eine UIView-Unterklasse ist. Die Lösung, die ich in einer meiner App verwendet, ist die layoutSubViews Methode von UITableViewCell zu überschreiben, und ich habe die Aktion für einige Zeit wie folgt verzögert.

- (void)layoutSubViews 
{ 
    [super layoutSubviews]; 

    [self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 
} 
+16

mit einer Verzögerung in der UI-Konfiguration? Scheint mir eine fürchterliche Übung nicht? – tommybananas

+0

Schreckliche Praxis in der Tat. –

+0

Nicht unbedingt. Wenn er eine Leistungseinbuße für ein UIScrollView verringern möchte, kann dies eine mögliche Lösung sein. – thedeveloper3124

9

Wenn Sie Änderungen an der Zelle des Rahmens und passen das Layout zu reagieren, müssen Sie -layoutSubviews in der Zellklasse implementieren. Denken Sie daran, [super layoutSubviews] anrufen.

+1

Das Problem mit layoutSubviews ist, dass es immer aufgerufen wird, wenn eine Zelle aus der Warteschlange genommen wird. Wenn Sie einen Frame nur einmal ändern müssen, wenn die Zelle zum ersten Mal eingerichtet wird, können Sie dies in watchFromNib tun. Das Problem dabei ist, dass Sie die angepassten Grenzen der Zelle nicht von der automatischen Einblendung nur in layoutSubviews erhalten können. – thedeveloper3124

16

Die UITableViewDelegate hat folgende Funktionen:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) 

Die Zelle selbst Rückrufe haben nicht dafür.

+0

Die richtige Antwort! – Fattie