2012-05-14 12 views

risposta

68

No non scrive viewDidLoad in classe di cellule personalizzate sottoclassi UITableViewCell (It; s parte di UIViewController) Avete un metodo chiamato

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 
} 

in cui è possibile definire cornici e tutto per i controlli di cella personalizzato .Refer Apple's UITableviewCell reference

Nota tuttavia che 'viewDidLoad' si chiama solo una volta nella vita dell'oggetto; è piuttosto come un inizializzatore nella programmazione OO generale. Tuttavia, 'layoutSubviews' verrà chiamato più volte su ciascuna cella (a seconda di problemi come lo scorrimento e così via). È importante rendersi conto che per questo motivo molte delle cose che "di solito fai" in viewDidLoad, è impossibile eseguire in layoutSubviews.

Nota che viewDidLoad si chiama volta solo: layoutSubviews si chiama spesso.

Sarà solo una semplice funzione se lo scrivi.

Tutorial for custom cell

+0

Potete dirmi per favore che qual è il primo metodo che viene chiamato automaticamente in uiTableViewCell? – user5457

+0

- initWithStyle: reuseIdentifier: viene chiamato first.Ihave dato un tutorial sopra puoi vedere. –

1

La funzione UIKit viewDidLoad è un membro di UIViewController e UITableViewCell non eredita da esso. È possibile scrivere un metodo denominatoviewDidLoad se lo si desidera, ma non verrà chiamato come nella sottoclasse UIViewController.

+0

Potete dirmi per favore che qual è il primo metodo che viene chiamato automaticamente in uiTableViewCell? – user5457

+1

Non è così semplice. Dipende dal tipo di UITableView che stai utilizzando. Tradizionalmente, un UITableView richiederebbe una cella personalizzata tramite il metodo delegato 'cellForRowAtIndex'. Sarebbe di grande aiuto sapere di più su ciò che stai cercando di fare. – borrrden

0

SI è possibile scrivere viewDidLoad in UITableViewCell ma viewDidLoad non è delegare metodo UITableViewCell modo che non si chiama automaticamente in modo da avere a chiamare manualmente [self viewDidLoad] per eseguire il codice.

+0

Potete dirmi per favore che qual è il primo metodo che viene chiamato automaticamente in uiTableViewCell? – user5457

+0

initWithStyle: reuseIdentifier: chiamerà ... – Maulik

0

è possibile utilizzare initWithFrame per UITableViewCell o UICollectionViewCell o qualsiasi sottoclasse di UIView.

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialisation code here 
    } 
    return self; 
} 
+0

Questo non è chiamato per me. – Alper

+3

chiamerà solo se la cella viene creata dinamicamente altrimenti puoi usare '- (id) initWithCoder: (NSCoder *) aDecoder' o' - (void) awakeFromNib' per l'inizializzazione –

+0

significa dinamicamente cosa esattamente? – Alper

5

Meglio chiamare anche super.layoutSubviews(). sintassi Swift:

override func layoutSubviews() { 
    super.layoutSubviews() 
} 
1

Mi rendo conto che questo è un vecchio thread, ma un modello a volte utilizzare (soprattutto se ho una classe base per le mie cellule personalizzati):

  1. aggiungere una proprietà BOOL, chiamalo qualcosa come "cellAlreadyDidLoad". L'ho chiamato in questo modo perché BOOL verrà impostato su NO, quindi non devo preoccuparmi di impostarlo in un metodo init.

  2. Creare un metodo cellDidLoad, denominato così con l'intento che è un po 'come il viewDidLoad che tutti conosciamo e amiamo.

  3. override del metodo layoutSubviews e aggiungere:

    if (!self.cellAlreadyDidLoad) 
    { 
        [self cellDidLoad]; 
        self.cellAlreadyDidLoad = YES; 
    } 
    

ora avete un metodo, cellDidLoad, che sarà chiamato solo una volta, sapendo che gli elementi dell'interfaccia utente (compreso il Vostro IBOutlets) sarà presente . Molto simile a viewDidLoad su un controller di visualizzazione.

4

Se stai cercando di inizializzare alcuni IBOutlets del vostro UITableViewCell, si consiglia di andare per la chiamata awakeFromNib():

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Do your stuff 
    // myIBOutlet.text = "Hello" 
} 
Problemi correlati