2012-04-16 6 views
36

Sono un principiante con Storyboard e quindi ho qualche difficoltà ...Collegare uscita di un prototipo di cella in uno storyboard

Ho creato un TableViewController e vorrei personalizzare il prototipo di cella. Nel Prototipo di celle ho aggiunto diverse etichette che vorrei personalizzare con la mia classe che eredita da UITableViewCell (AreaListCell). Nello Storyboard, per il Prototipo di cella ho configurato la classe personalizzata con "AreaListCell" e il suo stile è "Personalizzato".

Nel storyboard, quando seleziono il prototipo di cella e poi l'assistente, l'assistente visualizzare la mia classe che implementa l'UITableViewController (AreasTableViewController) e non
mia classe "AreaListCell".

La conseguenza è che posso creare uno sbocco (utilizzando Ctrl + trascina dall'etichetta del Prototipo cella) alla classe AreasTableViewController ma non alla classe AreaListCell! Qualche idea su come connettere il Prototipo Cell con la mia classe AreaListCell?

Grazie per il vostro aiuto!

risposta

127

AGGIORNAMENTO: A partire da Xcode 4.6 (possibilmente precedente) ora è possibile creare punti vendita controllando il trascinamento! - Questo deve essere fatto in una sezione di interfaccia o un'estensione di classe (l'estensione di classe non esiste di default per sottoclassi di nuove celle.) Grazie a Steve Haley per averlo indicato.

Non è possibile ottenere la presa automaticamente collegati e creato da trascinando nel blocco di codice nel assistente al montaggio, che è povero, ma è possibile creare le prese manualmente e collegarli poi

nella vostra interfaccia sottoclasse di cellule:.

@interface CustomCell : UITableViewCell 

@property (nonatomic) IBOutlet UILabel* customLabel; 

@end 

Sintetizzare come normale nell'implementazione

Nello storyboard, seleziona la cella e vai all'ispettore connessioni, vedrai la nuova presa.Trascinate da lì per l'elemento rilevante nel prototipo:

enter image description here

Questo può ora essere letta come cell.customLabel nel metodo cellForRowAtIndexPath:.

+0

Ero abituato a farlo per la mia cella, ma all'improvviso ha smesso di funzionare, my customLabel IBOutlet == nil, e non appare nella cella. Quale può essere la causa del problema? Nelle prese del magazzino sono collegate. – BergP

+0

TLDR: crea uno sbocco programmaticamente e collegalo tramite controllo + trascinamento dallo storyboard – Christoph

21

Sì, non è possibile connettere le viste che si trovano all'interno di una cella prototipo personalizzata utilizzando il metodo Ctrl + trascinamento. Usa invece la proprietà tag della vista e poi, quando stai costruendo la cella, estrai le etichette usando i loro tag.

Qui:

//Let's assume you have 3 labels. One for a name, One for a count, One for a detail 
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3 


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"]; 

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1]; 
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2]; 
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3]; 

    nameLabel.text = @"name"; 
    countLabel.text = @"count"; 
    detailLabel.text = @"details"; 

    return theCell; 
} 

È anche possibile impostare le etichette come proprietà nel codice cellulare personalizzato e poi, quando la cellula viene inizializzato utilizzare la chiamata viewWithTag per assegnare le proprietà delle etichette alle etichette che avete creato su i tuoi storyboard.

Mi ci sono voluti alcuni giorni per capire che non potevo ctrl + trascinare all'interno di una cella personalizzata per creare un IBOutlet.

Buona fortuna!

MODIFICA: È possibile creare IBOutlets per le etichette all'interno di una cella personalizzata e creare i collegamenti in modo interattivo, non solo tramite il metodo Ctrl + trascinamento.

MODIFICA 2: Ho sbagliato completamente, è possibile fare CTRL + trascinamento. Vedi la seconda risposta a questa domanda. È difficile, ma funziona abbastanza bene.

+0

È certamente possibile collegare prese da un prototipo di una sottoclasse cella utilizzata come prototipo. Risponderò con i dettagli una volta che posso avere un esempio insieme. – jrturton

+0

Con ctrl + trascina? –

+0

OK, non è possibile creare automaticamente punti vendita trascinando il controllo sull'assistente, ma è possibile creare manualmente le prese e collegarle. Sicuramente non hai bisogno di usare i tag. Il downvote è stato un po 'troppo, se modifichi la risposta lo rimuoverò (non posso modificare un voto ora a meno che tu non lo modifichi) – jrturton

0

Swift 3

// stiamo usando questo se le immagini sono sul server.

// stiamo ricevendo immagini da un URL.

// è possibile impostare l'immagine dal tuo Xcode.

  1. L'URL di immagini sono in un nome di matrice = miniature cioè self.thumbnail [indexPath.row]
  2. su UITableViewCell mettere un IMAGEVIEW sulla cella
  3. selezionare UIImageView assegna un tag da storyboard.

    let pictureURL = URL(string: self.thumbnail[indexPath.row])! 
    let pictureData = NSData(contentsOf: pictureURL as URL) 
    let catPicture = UIImage(data: pictureData as! Data) 
    var imageV = UIImageView() 
    imageV = cell?.viewWithTag(1) as! UIImageView 
    imageV.image = catPicture