2011-10-23 13 views
11

Desidero creare un menu statico (IOS 5) e tentare di creare celle personalizzate all'interno dello storyboard per poi caricarlo nella vista tabella raggruppata.Creazione personalizzata di UITableViewCell all'interno di uno storyboard

ho creato presa

@property(nonatomic,strong) IBOutlet UITableViewCell *labelCell; 

La classe ViewController è impostata la corretta TableViewController e ho collegato il cellulare personalizzato a questo sbocco.

Ho anche il delegato e l'origine dati impostati.

io ho

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return self.labelCell; 
} 

Sono sicuro che c'è un sacco di sbagliato in questo, ma sto solo cercando di visualizzare una cella e passare da lì. Non sembrano esserci esempi di come creare celle personalizzate all'interno dell'IB attraverso lo storyboard. Posso ancora usare il vecchio modo di creare un file xib e caricarlo nel mainBundle ma voglio solo rimanere aggiornato credo.

ma con quello che ho sopra ho un crash quando carico questo controller di visualizzazione. SIGABRT

risposta

13

Se è stato impostato UITableView per utilizzare "Celle statiche" nello storyboard, non è necessario implementare alcuno dei metodi UITableViewDataSource ed è possibile modificare la cella direttamente in Interface Builder. Per una singola cella di etichetta, seleziona la cella e cambia il suo tipo in "Base". Ora puoi modificare la cella come faresti con qualsiasi altro oggetto vista.

+1

Yep. Questo è tutto.Non sono sicuro del motivo per cui non ho trovato nessuna guida che ti abbia detto di farlo. Rende molto più facile. – Doug

+1

Come una domanda casuale, l'uso di celle statiche implica che hai esattamente la quantità di celle che specifichi in IB? Dal momento che non è necessario implementare i metodi dell'origine dati, suppongo che non sia possibile modificare i dati nella vista tabella e per questo li hanno definiti statici, giusto? – Warkst

+0

@Warkst - esattamente. Di fatto, è necessario rimuovere le implementazioni di stub dei metodi di origine dei dati. – jrturton

27

Ecco cosa ho imparato su come si ottengono le celle per il proprio tavolo quando si utilizza lo storyboard. Quando trascini un UITableView nella tua vista, viene fornito con una cella prototipo già impostata come sottoview. Per utilizzare questa cella prototipo, impostare un identificativo di riutilizzo univoco nell'ispettore attributi e quindi utilizzare lo stesso identificatore per rimettere in coda la cella nel proprio cellaForRowAtIndexPath: method. Tralascio il codice per la creazione di una cella da zero se la chiamata di dequeue restituisce zero; Non penso che possa accadere. Quindi, deseleziona la cella, configurala con i soliti metodi UITableViewCell e restituiscila.

Ma è anche possibile creare sottoclassi personalizzate di UITableViewCell. Basta impostare il nome della classe nella finestra di ispezione dell'identità della classe dello storyboard e trascinare gli elementi desiderati dalla tavolozza Oggetti nella cella. Quindi crea le proprietà di IBOutlet per loro nei file di codice della sottoclasse e collegali alla cella nello storyboard nel solito modo. Questo è molto meglio che dover fare tutto in codice!

Infine, è possibile avere più di un tipo di cella nella tabella. Basta trascinare gli oggetti UITableViewCell dalla tavolozza nella tabella e assegnare a ognuno un identificativo di riutilizzo unico nell'ispettore attributi. Nel tuo cellaForRowAtIndexPath: metodo, scegli il tipo di ogni cella e puoi avere una vista tabella molto flessibile.

+1

Questo è tutto vero, ma la domanda riguarda le viste statiche delle tabelle, che non utilizzano i prototipi. – jrturton

+0

Ho un nuovo scenario (dubbio). Se ho un 'UITableView' con una cella personalizzata che contiene i tasti' + ',' -' e 'UITextField'. tutte le impostazioni sono già state eseguite in base al paragrafo 2 ma ora, se voglio impedire il riutilizzo delle mie celle, esiste un buon metodo per farlo? dovrei farlo? (Voglio la funzionalità di aggiungere più di un email ID) – thesummersign

+0

@jrturton Ah, ma alcuni arrivano qui da una ricerca su Google, senza rendersi conto della parte "statica". Il titolo è un po 'fuorviante. Quindi * questa * risposta era in realtà ciò che * I * stava cercando. –

4

This tutorial è stato utile per me. Puoi fare riferimento a qualsiasi oggetto di cui hai bisogno attraverso il tag.

Nel trascinamento Storyboard su un UIImageView o UILabel ecc e impostare il tag a 100 (quello che volete) allora nella vostra - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath utilizzare il tag per farvi riferimento.

Ecco il codice di esempio nel tutorial, basta ricordarsi di impostare i tag nello storyboard:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

// Configure the cell... 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Display recipe in the table cell 
Recipe *recipe = [recipes objectAtIndex:indexPath.row]; 
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
recipeImageView.image = [UIImage imageNamed:recipe.imageFile]; 

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101]; 
recipeNameLabel.text = recipe.name; 

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102]; 
recipeDetailLabel.text = recipe.detail; 

return cell; 
} 
Problemi correlati