2012-04-21 18 views
6

Finora ho solo avuto bisogno di implementare celle prototipo con disegni predefiniti (normale, sottotitoli, ecc.) E non è stato un problema.Cellule di prototipo iOS con UIControls all'interno di

Ora ho bisogno di implementare celle prototipo che contengano alcuni controlli come uno switch segmentato, uno switch o altro. Il problema è che non sono stato in grado di scoprire come vengono implementate le azioni attivate e in che modo sono correlate al controllo. Inoltre non ho trovato alcun esempio di come siano implementate diverse celle prototipo all'interno di un singolo UITableViewController.

So che è una specie di domanda generica, ma apprezzerei alcuni suggerimenti qui. Forse qualcuno sa di qualche documentazione, tutorial, ecc. Bene, qualsiasi aiuto farebbe,

Thak in anticipo.

risposta

11

Mi ci è voluto un po 'per capire come utilizzare le celle del prototipo. Se si desidera accedere agli elementi dell'interfaccia utente all'interno di una cella prototipo, è necessario creare una sottoclasse di UITableViewCell e assegnarla alla cella prototipo in Interface Builder. Poi si devono definire le proprietà IBOutlet manualmente es .:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

Dopodiché, è possibile collegare gli elementi di interfaccia attraverso il controllo-trascinamento dall'elemento alla definizione proprietà nel assistente vista. Le IBActions possono invece essere definite all'interno del View Controller proprietario. È possibile controllare e trascinare da un elemento dell'interfaccia al file di intestazione del Controller di visualizzazione e creare un'azione. All'interno dell'implementazione dell'azione probabilmente vorrai sapere quale cella ha attivato l'azione. Lo faccio in questo modo:

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

Un'altra soluzione per trovare la cella corrispondente e il percorso indice (da jrturton):

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

Anche se questo è un po 'eccentrico, non ho trovato una soluzione migliore finora. Spero possa aiutare.

+1

Pochi minuti fa, ho trovato questo video (e la sua seconda parte): http://youtu.be/0AsChJk422c E'più o meno quello che lei ha spiegato, ma lui/lei usa un delegato. Lo stesso principio, ma sembra un po 'più pulito. Grazie per la tua risposta ! – Marcal

+0

È davvero una soluzione più pulita. Grazie per il puntatore. Anche se un po 'di codice boilerplate per tutti i protocolli. – Sbhklr

+1

Un modo migliore per trovare la riga del controllo si possono trovare nella mia risposta qui: http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton

Problemi correlati