Beispiele für Container View Controller [geschlossen]

94

Kann mich jemand auf gute Beispiele für das Erstellen eines benutzerdefinierten Ansichts-Controllers als Container-Ansichts-Controller hinweisen? Die einzige Dokumentation, die ich finden kann, sind einige Absätze in der UIViewController-Klassenreferenz . Ich glaube, ich brauche ein bisschen mehr Informationen und eine Beispielimplementierung wäre schön. Google hat überhaupt nichts aufgetaucht.

Ich interessiere mich speziell für die Methode:

transitionFromViewController:toViewController:duration:options:animations:completion:
Ablenkung
quelle
Haben Sie andere Quellen dafür gefunden als die erwähnte Hyperverschlüsselung?
John Estropia
1
Noch nicht. Ich werde heute später noch einmal graben, wenn ich Zeit habe. Es scheint bizarr, dass es so wenig Informationen darüber geben würde, wenn man bedenkt, wie wichtig und nützlich es ist. Ich frage mich, ob es fehlerhaft ist und besser dokumentiert wird, wenn es verbessert wird.
Undistraction
3
Das ist für mich äußerst verwirrend. In der Ansicht kann beispielsweise nur ein Controller eingebettet sein. Was ist, wenn Sie den Controller in dieser Containeransicht umschalten möchten?
user4951
@ JanakNirmal Sehr verpflichtet.
Undistraction
Kann ich die Containeransicht ausblenden
?

Antworten:

51

Das Beste, was ich bisher gefunden habe, ist die WWDC 2011 Session Video Session 102 - Implementierung von UIViewController Containment .

hypercrypt
quelle
1
Das Gleiche gilt. Es ist nicht mein Lieblings-Demo-Codebeispiel, aber es implementiert VC-Container sowie die Speicherverwaltung ordnungsgemäß. Es ist wirklich wichtig, dass Ihre untergeordneten View-Controller freigegeben werden, wenn sie nicht mehr sichtbar sind.
Memmons
1
Leider funktionierte die Demo zur Verwendung von ContainerViewController nicht, da er kein E-Mail-Setup auf seinem iPad hatte :-(
Ken M. Haggerty
Hat diese Sitzung ein Codebeispiel?
user4951
Haben Sie jetzt den Beispielcode, ich brauche ihn, weil ich viel versucht habe, aber noch keinen gelösten Stoff.
iPhone programmatisch
37

Neben der bereits erwähnten WWDC-Sitzungsvideositzung 102 - Implementieren von UIViewController Containment in Hypercrypt behandelt die Apple WWDC 2012-Sitzung zum Thema "Die Entwicklung von Ansichtscontrollern unter iOS" auch dieses Thema, und der Beispielcode ist Teil des Beispielcodepakets:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

Hier gibt es auch ein Beispiel: https://github.com/toolmanGitHub/stackedViewControllers

JosephH
quelle
2
+1 Erwähnung, wo man dieses verdammte Codepaket bekommt. Ich habe es durchgesehen.
user4951
6
+1 nochmal, warum o warum kann Apple den WWDC-Sitzungscode nicht auf seine Mitgliederseiten setzen?
Axello
+1, Würde es Ihnen etwas ausmachen, zu teilen, wie Sie diesen Quellcode-Pfad erhalten?
Janak Nirmal
1
@ JanakNirmal Welchen Quellcode haben Sie Probleme zu bekommen? Um den WWDC-Code zu erhalten, folgen Sie einfach dem dmg-Link und melden Sie sich mit Ihrer Apple-Entwickler-ID an.
JosephH
17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

Diese IBAction löst den Übergang zwischen zwei VCs aus:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}
Sonnywang
quelle
1
Dies ist ein großartiges Beispiel. In diesem Fall kann die Speicherverwaltung jedoch verbessert werden: stackoverflow.com/a/8453677/849616 für eine geeignetere Lösung.
Vive
1
Nicht dass du falsch liegst. Aber [self addChildViewController: vc1]; macht keinen Sinn. Der Container VC verfügt möglicherweise über MEHRERE Container View Controller.
user4951
@Vive Ich habe einen Punkt in meinem Projekt erreicht, an dem ich mir Gedanken über die Speicherverwaltung mache. Können Sie mir sagen, was besonders der von Ihnen gepostete Link in Bezug auf die Speicherverwaltung besser macht? Ich bin sehr neu und habe
Schwierigkeiten
10

Könnte dies:

http://subjective-objective-c.blogspot.com/2011/08/writing-high-quality-view-controller.html

Genug für deine Bedürfnisse?

Rui Peres
quelle
4
Eigentlich hatte ich das schon gefunden, aber leider ist es über Ios4 geschrieben, aber 5 hat wesentliche Änderungen vorgenommen. Apple unterstützt jetzt ausdrücklich das Erstellen von benutzerdefinierten View Controller-Containern, obwohl sie uns anscheinend nicht dabei helfen möchten, herauszufinden, wie sie verwendet werden. Trotzdem danke.
Undistraction
Können Sie mir zeigen, wo sie das sagen? Ich zweifle nicht an dir, bin nur neugierig, weil ich auch damit zu kämpfen habe.
Rui Peres
4
Keine Sorge. Ich habe den Code nach seinen Containerklassen durchsucht und keine von ihnen verwendet eine der folgenden Methoden: addChildViewController:, removeFromParentViewController, TransitionFromViewController: toViewController: Dauer: Optionen: Animationen: Vervollständigung:, willMoveToParentViewController: und didMoveToParentViewController: ios5-Dokumentation für UIViewController.
Undistraction
8

Ich weiß nicht, ob dies ein "gutes" Beispiel ist, aber Sie können einen kostenlosen Container ViewController unter https://bitbucket.org/javieralonso/jaacordeonviewcontroller/overview herunterladen

Es ist eine vollständige Akkordeon Metapher Container View Controller

Javieralog
quelle
Schöner Fund. Das sieht nützlich aus.
Undistraction
3

Dies sind meine bevorzugten (iOS7-fähigen) Tutorials / Beispiele zu diesem Thema (alle drei haben Quellcode auf Github verfügbar):

Controller-Containment anzeigen

Benutzerdefinierte Container View Controller-Übergänge

Interaktive benutzerdefinierte Container View View Controller-Übergänge

Und dann bietet Apple natürlich eine ganze Zusammenfassung zu diesem Thema an, die ich für von unschätzbarem Wert halte:

Erstellen von benutzerdefinierten Containersicht-Controllern

radiovisuell
quelle