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:

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 .


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


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];
}

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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.