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.