Laden Sie einen UIView aus einer Feder, wie eine Untersicht einer anderen UIView geladen, auch aus einer Feder
Die Idee ist im Grunde:
Innerhalb von myViewController
Feder ich habe eine UIView als eine Untersicht, mit verbindungen zu einer IBOutlet
auf MyViewController
Klasse. Ich möchte zum laden der UIView Untersicht aus einer Feder auch. Die Untersicht hat auch eine Klasse zugeordnet. Aber die Untersicht ist nicht angezeigt. Hier ist, was ich tun
auf MyViewController.h
@interface MyViewController : UIViewController {
IBOutlet SubView *subView; //this outlet is connected to an empty UIView on IB
}
@end
auf MyViewController.m
-(id)init {
if ((self = [super init])) {
//load the main view
[[NSBundle mainBundle] loadNibNamed:@"myViewController" owner:self options:nil];
//load the sub view from another NIB
self.subView = [[[NSBundle mainBundle] loadNibNamed:@"subView" owner:self options:nil] objectAtIndex:0];
}
}
die Untersicht.h ist definiert als:
@interface SubView : UIView {
}
@end
Was mache ich falsch?
Im Interface Builder können Sie nicht setzen Sie die Klasse für die innen-Ansicht, die Sie erwähnten? Dann mit einem XIB-Datei sollte den rest erledigen, aber ich bin mir nicht 100% sicher.
InformationsquelleAutor GianPac | 2011-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
GianPac - schamlose Eigenwerbung, aber ich habe ein blog-post über dieses vor etwa einem Monat. Fühlen Sie sich frei, zu ignorieren, die drop-shadow zugehörigen code.
http://nathanhjones.com/2011/02/20/creating-reusable-uiviews-with-a-drop-shadow-tutorial/
Auch, dass ich (Dank der Beratung von mehreren Personen) vermeiden, jemals mit mehr als einem view-controller auf meiner 'Ansicht'. Die Methode, die ich erläutert haben können Sie, um dies zu erreichen und immer noch mit IB zu tun, das layout/outlets.
initWithCoder:
stattinitWithFrame:
weil es instanziiert wird in einem "übergeordneten" nib-Datei. Auch, ich glaubst, wenn Sie sind der Rückgabe eine andere Instanz von init, es gibt keine Notwendigkeit, rufen Sie[super init*]
da bekommen wir loswerden, dass die Instanz sowieso.danke. Weiß immer noch nicht, warum mir nicht laden, aber versucht, Ihnen und arbeitete.
Stimmen zu, dass initWithCoder mehr angemessen ist. vielen Dank für den Kommentar auf dem blog und Sie waren korrekt, ich habe ein Leck. Ich habe aktualisiert die Datei herunterladen.
Eigenwerbung wirkt Wunder... Tolle Anleitung! Danke!
InformationsquelleAutor Nathan Jones
Was Sie tun müssen, ist legen Sie Ihre Datei-Besitzer für eine
UIViewController
, hook up Ihren Blick auf dieview
Eigentum der Besitzer der Datei, speichern Sie Ihre nib. In Ihrem code, laden Sie Ihre Feder wie diese:Sollte aus dem Rennen.
Eine Letzte Anmerkung, ist, dass die Art der
subView
sollten die gleichen sein, wie was definiert ist als name der Klasse im interface builder. Wenn es eine Untersicht gibt, dann ist es sicher zu deklarieren es alsSubView*
im code.[[NSBundle mainBundle] loadNibNamed:@"myViewController" owner:self options:nil]; UIViewController *c = [[UIViewController alloc] initWithNibName:@"SubView" bundle:nil]; self.subView = (SubView *)[c view];
auf die IB-Datei-Besitzer -> UIViewController anzeigen -> UntersichtSie
subView
als eine unteransicht der übergeordneten Ansicht, die Sie wollen es zu sein. Ich dachte, das war ziemlich selbsterklärend.ja, ich weiß, aber immer noch nicht geladen.
Vielen Dank für diese, rettete mich vor einer schlaflosen Nacht
Danke. Es funktionierte perfekt, aber es scheint seltsam, dass wir brauchen, um zu erstellen Sie eine dummy-UIViewController, dass nicht alles tun, nur um diese Arbeit zu machen. Wissen Sie, warum wir das tun müssen?
InformationsquelleAutor jer