2012-04-16 4 views
36

bin ich ein Neuling mit dem Storyboard und so habe ich einige Schwierigkeiten ...Connect Ausgang einer Zelle Prototyp in einem Storyboard

Ich habe eine Tableviewcontroller erstellt, und ich mag die Zelle Prototyp anpassen. Im Zellprototyp habe ich mehrere Labels hinzugefügt, die ich mit meiner eigenen Klasse anpassen möchte, die von UITableViewCell (AreaListCell) erbt. Im Storyboard habe ich für den Zellprototyp die Custom Class mit "AreaListCell" konfiguriert und der Style ist "Custom".

Im Storyboard, als ich das Handy Prototype und dann den Assistenten auswählen, der Assistent meiner Klasse an, die den UITableViewController (AreasTableViewController) implementiert und nicht
meine „AreaListCell“ -Klasse.

Die Konsequenz ist, dass ich Steckdose (mit Ctrl + Drag von der Bezeichnung des Zellprototyps) in die AreasTableViewController-Klasse, aber nicht in die AreaListCell-Klasse erstellen kann! Irgendeine Idee, wie man den Zellprototyp mit meiner AreaListCell Klasse verbindet?

Danke für Ihre Hilfe!

Antwort

127

AKTUALISIERUNG: Ab Xcode 4.6 (möglicherweise früher) können Sie nun Ausgänge durch Ziehen mit der Maus erstellen! - Dies muss in einem Schnittstellenabschnitt oder einer Klassenerweiterung erfolgen (die Klassenerweiterung ist nicht standardmäßig für neue Zellenunterklassen vorhanden. Danke an Steve Haley für den Hinweis.

Sie können die Steckdose nicht automatisch beziehen verbunden und erstellt von im Assistenten-Editor in den Codeblock ziehen, was schlecht ist, aber Sie können die Ausgänge manuell erstellen und verbinden sie dann

in Ihrer Zelle Unterklasse Schnittstelle.

@interface CustomCell : UITableViewCell 

@property (nonatomic) IBOutlet UILabel* customLabel; 

@end 

Synthesize als normal in der Implementierung

Wählen Sie im Storyboard die Zelle aus, und wechseln Sie zum Verbindungsinspektor. Sie sehen den neuen Ausgang.Ziehen Sie von dort auf das entsprechende Element in Ihrem Prototyp:

enter image description here

Dies kann nun als cell.customLabel in Ihrem cellForRowAtIndexPath: Verfahren zugegriffen werden.

+0

Ich habe das für meine Zelle gemacht, aber plötzlich hat es funktioniert, mein customLabel IBOutlet == nil, und es erscheint nicht in der Zelle. Was kann die Ursache des Problems sein? Im Storiboard sind Steckdosen angeschlossen. – BergP

+0

TLDR: Erstellen Sie eine Steckdose programmgesteuert und verbinden Sie es durch Steuerung + Ziehen aus dem Storyboard – Christoph

21

Ja, Sie können Ansichten, die sich in einer benutzerdefinierten Prototypzelle befinden, nicht mit der Methode ctrl + drag verbinden. Verwenden Sie stattdessen die Tag-Eigenschaft der Ansicht und ziehen Sie dann beim Erstellen der Zelle die Labels mithilfe ihrer Tags heraus.

hier:

//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; 
} 

Sie könnten setzen auch die Etiketten auf, als Eigenschaften in Ihrem Code benutzerdefinierte Zelle und dann, wenn die Zelle Verwendung der viewWithTag Aufruf initialisiert wird, um die Label-Eigenschaften auf die Etiketten, die Sie erstellt haben, zuweisen auf deine Storyboards.

Es dauerte ein paar Tage, bis ich erkannte, dass ich aus einer benutzerdefinierten Zelle nicht Strg + ziehen konnte, um ein IBOutlet zu erstellen.

Viel Glück!

EDIT: Sie können IBOutlets für Ihre Etiketten innerhalb einer benutzerdefinierten Zelle erstellen und erstellen Sie die Links programmatically, nur nicht durch die Strg + Ziehen-Methode.

EDIT 2: Ich war total falsch, Sie können Strg + ziehen. Siehe die zweite Antwort auf diese Frage. Es ist schwierig, aber es funktioniert ganz gut.

+0

Sie können sicherlich Auslässe von einem Prototyp zu einer Zelle Unterklasse als Prototyp verwendet verbinden. Ich werde mit Details antworten, sobald ich ein Beispiel zusammen bekommen kann. – jrturton

+0

Mit Strg + Ziehen? –

+0

OK, Sie können nicht automatisch Outlets erstellen, indem Sie das Steuerelement zum Assistenten ziehen, aber Sie können Outlets manuell erstellen und diese verbinden. Sie müssen sicherlich keine Tags verwenden. Downvote war ein bisschen viel, wenn Sie die Antwort bearbeiten, werde ich es entfernen (Ich kann jetzt eine Abstimmung nicht ändern, wenn Sie nicht bearbeiten) – jrturton

0

Swift 3

// verwenden wir diese Option, wenn Ihre Bilder auf dem Server sind.

// Wir bekommen Bilder von einer URL.

// Sie können ein Bild von Ihrem Xcode festlegen.

  1. Die URL der Bilder sind in einem Array name = Thumbnail d.h self.thumbnail [indexPath.row]
  2. auf UITableViewCell legte eine Imageview on Zelle
  3. select UIImageView es ein Tag aus Storyboard zuweisen.

    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 
    
Verwandte Themen