Benutzerdefinierte UIView mit Feder in swift ohne Verwendung loadFromNib in der view-controller
Benutzte ich immer die loadNibNamed Methode für das laden von benutzerdefinierten Ansichten in der Ansicht-Controller, aber jetzt versuche ich, zu vermeiden, fordern, dass die Methode außerhalb der benutzerdefinierten Ansicht für die es mehr wiederverwendbar, so dass, wenn eine andere person verwendet meine eigene Sicht, die er nur brauchen zu instanziieren der view ohne loadFromNib, zum Beispiel:
var myView: MyView = MyView()
Durch und fügen Sie diese Ansicht, um die Ansicht Steuerung Ansicht wäre genug, die benutzerdefinierte Ansicht wird geladen Sie die Spitze in sich.
Ich versuche zu tun, ist es bei Swift, in ObjC, die ich gefunden habe code, ähnlich dem, der diese Antwort: UIView und initWithFrame und eine NIB-Datei. Wie bekomme ich die NIB-Datei geladen?
Aber im swift-ich kann nicht in der init verwendet, in der Antwort:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
Habe ich diese Methode und es endet mit einer Endlosschleife:
override init(frame: CGRect) {
super.init(frame: frame)
self.loadFromNibNamed("MyView")
}
Habe ich auch versucht, indem eine andere Sicht in MyView als IBOutlet wie die andere Antwort sagt, und mit allen inits:
@IBOutlet var view: UIView!
override init() {
super.init()
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
Aber immer noch den Fehler der Endlosschleife.
Ich kann nicht finden, eine gute Lösung, und es macht mich verrückt!! Jemand kann mir bitte helfen? Danke!
MyView
oder MediaPlayerView
, resp.? Dies könnte der Grund für die endlos-Schleife, und ich würde vermuten init(coder:)
als die Ursache.
InformationsquelleAutor diegomen | 2015-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich die sauberere Ansatz ist nicht verwenden Sie die Standard-Initialisierungen, aber mit Ihren eigenen, z.B. wie in diesem
Diese Weise, wenn Sie instanziieren Sie es von irgendwo anders, Sie werden sofort sehen, dass dies nicht nur die einfache alte Instanziierung einige
UIView
aber es hat Nebenwirkungen (dass die Ansicht geladen wird, aus einer Feder)Ich bin nicht sicher über die
super.init(frame)
nennen, es ist möglich, dassloadNibNamed
auch nennen, dass für Sie, so möchten Sie vielleicht zu prüfen, ob ausInformationsquelleAutor MarkHim
Du bist immer eine unendliche Schleife, weil
loadNibNamed(_,owner:,options:)
nenneninit
, so versuchen Sie dann wieder zu laden, die Feder, und wieder, usw... Versuchen Sie dies:Swift 4
Was dieser code macht, ist, laden Sie die Aussicht von der Spitze, und dann hinzufügen, um eine Untersicht in Ihrem Blick.
Dies funktioniert auch beim hinzufügen Ihrer Sicht auf einem anderen xibs, fügen Sie
@IBDesignable
und es verfügbar sein wirdInformationsquelleAutor Fantini