Angenommen, ich laden einen View-Controller von einer Feder, und beschließen, etwas mit einer seiner Unteransicht hinter der Szene zu tun. Zu einem späteren Zeitpunkt würde ich die Ansicht dieses View-Controllers zeigen.Machen Sie eine Ansicht (initialisiert von initWithNibName) Laden Sie alle ihre Unteransicht
viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[viewController.someSubview doSomething];
//later on
[mainView addSubview:viewController.view];
Das Problem besteht darin, dass das someSubview Objekt nicht geladen zu sein scheint, bis die Ansicht angezeigt wird, so dass die Methode doSomething wird nicht aufgerufen. Bis jetzt ist mein Workaround:
[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
initialisieren die Subviews von Viewcontroller zuerst. Gibt es einen eleganteren Weg (wie eine loadSubviews-Methode oder etwas) für diese Aufgabe?
Danke, das es tat. – iamj4de
@MarkAmery Apple weist Sie explizit an, in der Dokumentation nicht -loadView aufzurufen: "Sie sollten diese Methode nie direkt aufrufen. Der View-Controller ruft diese Methode auf, wenn seine View-Eigenschaft angefordert wird, aber aktuell Null ist. Diese Methode lädt oder erstellt eine View und weist es der View-Eigenschaft zu. " –
@MikeWeller Guter Punkt - ich hatte die Dokumentation nicht genau genug angesehen, um das zu wissen. Ich denke, wir müssen uns dann zwischen zwei leicht hässlichen Hacks entscheiden. Für meinen Teil werde ich wahrscheinlich bei 'loadView' bleiben, nur weil es expliziter ist, aber ich gebe zu, dass es nicht die saubere Lösung ist, die ich dachte. –