Ich habe eine benutzerdefinierte Ansicht mit einer .xib-Datei für das Layout erstellt. Ich möchte diese Ansicht programmatisch als Unteransicht zu einer anderen Ansicht erstellen und hinzufügen.Programmgesteuertes Hinzufügen einer benutzerdefinierten Ansicht zu einer anderen Ansicht
Subview 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 nicht sicher, wie man das macht, erwartet der einzige Konstruktor zur Zeit eine Instanz von NSCoder, die ich nicht habe.
Ich habe versucht, eine zusätzliche initialiser zu geben: es
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:
let v = Subview(title: dataSource[i].whatever, text: dataSource[i].bla)
Aber es scheitert beim Versuch, die Etikettenstellen auszupacken, was Sinn als die macht .xib wurde nicht initialisiert.
Ich habe bereits versucht, eine Tabellenansicht und benutzerdefinierte Zellen anstelle der programmatischen Erstellung der Benutzeroberfläche für die Seite, es funktioniert nicht wirklich, weil dies eine Detailseite ist und ich nur ein einzelnes Objekt als meine Datenquelle haben das Array, das der TableView-Delegat rowForIndexPath erwartet. Ich weiß, dass ich eine Mapper-Methode schreiben könnte, um das Objekt in ein Array seiner Eigenschaften zu verwandeln, aber ich würde das lieber vermeiden, wenn es möglich ist.
Danke.
Da in Ihrem Fall nur die Klasse initialisiert wurde und nicht die Outlets als nib initialization nicht vergeben wurde, können Sie 'self = Bundle.main.loadNibNamed (" Subview ", Besitzer: self, Optionen: nil) [0 ] ' – iphonic
schauen ..http: //stackoverflow.com/a/33946855/4003548. – vaibhav
https://stackoverflow.com/questions/35659714/loading-a-xib-file-to-a-uiview-swift/35666644#35666644 Dies sollte hilfreich sein –