Przykłady kontrolera widoku kontenera [zamknięte]

95

Czy ktoś może wskazać mi jakieś dobre przykłady tworzenia niestandardowego kontrolera widoku jako kontrolera widoku kontenera? Jedyną dokumentacją, jaką mogę znaleźć, jest kilka akapitów w odwołaniu do klasy UIViewController . Czuję, że potrzebuję trochę więcej informacji i przykładowa implementacja byłaby miła. Google w ogóle nic nie pokazało.

Szczególnie interesuje mnie metoda:

transitionFromViewController:toViewController:duration:options:animations:completion:
Nieuwaga
źródło
Czy znalazłeś inne źródła tego niż wspomniany hiperkrypt?
John Estropia,
1
Jeszcze nie. Jeśli będę mieć czas, później będę miał czas. Wydaje się dziwne, że byłoby tak mało informacji na jego temat, biorąc pod uwagę, jak ważne i przydatne jest to. Zastanawiam się, czy jest wadliwy i będzie lepiej udokumentowany, gdy zostanie ulepszony.
Undistraction,
3
Jest to dla mnie niezwykle mylące. Na przykład widok może mieć tylko jeden osadzony kontroler. A co jeśli chcesz przełączyć kontroler na ten widok kontenera?
user4951
@JanakNirmal Bardzo zobowiązany.
Undistraction,
czy mogę ukryć widok kontenera
Maulik shah,

Odpowiedzi:

52

Najlepszą rzeczą, jaką do tej pory znalazłem, jest sesja wideo WWDC 2011 Session 102 - Implementing UIViewController Containment .

hypercrypt
źródło
1
Tak samo. To nie jest mój ulubiony przykład kodu demonstracyjnego, ale poprawnie implementuje kontenery VC, a także zarządzanie pamięcią - bardzo ważne jest, aby Twoje podrzędne kontrolery widoku zostały zwolnione, gdy nie są już widoczne.
memmons
1
Niestety, wersja demonstracyjna dotycząca korzystania z ContainerViewController nie działała, ponieważ nie miał konfiguracji poczty e-mail na swoim iPadzie :-(
Ken M. Haggerty
Czy ta sesja zawiera przykładowy kod?
user4951
czy masz teraz przykładowy kod, potrzebuję go, ponieważ wiele próbowałem, ale jeszcze nie rozwiązałem.
iPhone programowo
37

Oprócz wspomnianej już hypercrypt sesji wideo WWDC Session 102 - Implementing UIViewController Containment , sesja Apple WWDC 2012 dotycząca „Ewolucji kontrolerów widoku w systemie iOS” obejmuje również ten temat, a przykładowy kod jest częścią przykładowego pakietu kodu:

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

Tutaj jest również przykład: https://github.com/toolmanGitHub/stackedViewControllers

JosephH
źródło
2
+1 wspominając, skąd wziąć ten cholerny pakiet kodu. Przeglądałem to.
user4951
6
Jeszcze raz +1, dlaczego o dlaczego Apple nie może umieścić kodu sesji WWDC na swoich stronach członkowskich?
axello,
+1, czy mógłbyś się podzielić, jak uzyskać tę ścieżkę kodu źródłowego?
Janak Nirmal
1
@JanakNirmal z jakim kodem źródłowym masz problem? Aby uzyskać kod WWDC, po prostu kliknij łącze dmg i zaloguj się za pomocą swojego identyfikatora programisty Apple.
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];
}

ta IBAction wyzwala przejście między dwoma VC:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}
sonnywang
źródło
1
To świetny przykład. Ale zarządzanie pamięcią w tym przypadku można poprawić: stackoverflow.com/a/8453677/849616 dla bardziej odpowiedniego rozwiązania.
Vive
1
Nie to, że się mylisz. Ale [self addChildViewController: vc1]; nie ma sensu. Kontener VC może mieć KILKA kontrolerów widoku kontenera.
user4951
@Vive Dotarłem do punktu w moim projekcie, w którym martwię się o zarządzanie pamięcią. Czy możesz mi powiedzieć, co szczególnie podany przez ciebie link działa lepiej pod względem zarządzania pamięcią? Jestem bardzo nowy i ma trudności z widzeniem rozbieżności
jacobronniegeorge
10

Czy to mogłoby:

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

Wystarcza na Twoje potrzeby?

Rui Peres
źródło
4
Właściwie już to odkryłem, ale niestety jest napisane o Ios4, ale 5 wprowadziło znaczące zmiany. Firma Apple wyraźnie obsługuje teraz tworzenie niestandardowych kontenerów kontrolera widoku, chociaż wydaje się, że nie chcą nam pomagać w ustalaniu, jak ich używać. W każdym razie dzięki.
Undistraction
Czy możesz mi pokazać, gdzie to mówią. Nie wątpię w ciebie, jestem po prostu ciekawy, bo ja też się z tym zmagałem.
Rui Peres
4
Bez obaw. Przejrzałem kod jego klas kontenerów i żadna z nich nie używa żadnej z następujących metod: addChildViewController :, removeFromParentViewController, transakcjaFromViewController: toViewController: duration: options: animations: complete :, willMoveToParentViewController: i didMoveToParentViewController: które są wymienione w zaktualizowanym Dokumentacja ios5 dla UIViewController.
Undistraction