Programmgesteuertes hinzufügen von benutzerdefinierten Ansicht zu einer anderen Ansicht

Habe ich erstellt eine benutzerdefinierte Ansicht mit ein .xib-Datei für das layout. Ich möchte ein Programm erstellen, und fügen Sie diese Ansicht als eine Untersicht auf eine andere Ansicht.

Untersicht Klasse:

class Subview: UIView {

@IBOutlet var view: UIView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var textLabel: UILabel!

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
    self.addSubview(view)
    view.frame = self.bounds
  }
}

Ich bin mir nicht sicher wie Sie gehen über es, ist die einzige Konstruktor erwartet zurzeit eine Instanz von NSCoder, die ich nicht habe.

Ich habe versucht, um ihm eine zusätzliche initialiser:

init(title: String, text: String) {
    titleLabel.text = title
    textLabel.text = text
    super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}

Und dann rufen Sie:

let v = Subview(title: dataSource[i].whatever, text: dataSource[i].bla)

Aber es schlägt fehl, wenn Sie versuchen, ändern Sie die label-Verkaufsstellen, die Sinn macht, als die .xib noch nicht initialisiert worden.

Hab ich schon versucht, mit einer tableview und benutzerdefinierte Zellen statt programmgesteuert erstellen der UI für die Seite, es funktioniert nicht wirklich, denn dies ist ein detail-Seite und ich habe nur ein einziges Objekt, wie meine Datenquelle anstelle des Arrays, welche die rowForIndexPath tableview delegate erwartet. Ich weiß, dass ich schreiben konnte, einige mapper Methode zum drehen des Objekts in ein array der Eigenschaften aber, die ich lieber vermeiden, wenn möglich.

Dank.

  • Da in Ihrem Fall nur die Klasse initialisiert wurde, nicht die outlets, wie nib Initialisierung nicht zugewiesen wurde, können Sie versuchen self = Bundle.main.loadNibNamed("Subview", owner: self, options: nil)?[0]
  • Aussehen ..stackoverflow.com/a/33946855/4003548.
  • stackoverflow.com/questions/35659714/... Dies sollte hilfreich sein
  • Danke für die Antworten, wenn ich versuche, entweder die Lösung, die ich bin, sehen diese Fehlermeldung, wenn ich versuche mit Bündeln.main.loadLibNamed: diese Klasse ist nicht die key-value-coding-konform für den Schlüssel, die ich denke, ist ein Problem mit den Steckdosen. Ich sollte auch beachten, ich kann fügen Sie die xib-zu meinem storyboard mit überhaupt keine Probleme, vielleicht brauche ich mehr als einen, das ist, warum ich brauchen, um herauszufinden, wie es programmatisch.
InformationsquelleAutor mike | 2017-03-20
Schreibe einen Kommentar