2011-09-29 10 views
6

Podczas implementowania przejścia między dwoma kontrolerami widoku, jak zmienić właściwość kontrolera widoku docelowego za pomocą obiektu przesuwania? Dokumentacja mówi, że można to zrobić wewnątrz metody prepareForSegue: sender:. próbowałem, ale nie udało mi się.Implementacja iOS 5 segue

Odpowiedz

13

Dunno, jeśli nadal potrzebujesz odpowiedzi na to pytanie, ale był to taki samotny post, a jeśli mam rację, to nie podlega już NDA. Jeśli się mylę, proszę moderuj moją odpowiedź w niepamięć, więc zaczynamy: Właśnie skończyłem robić coś, co wykorzystuje to, czego potrzebujesz. Jest to kod, który działa dla mnie:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"relevantSegueIdentifier"]) 
    { 
     // [segue destinationViewController] is read-only, so in order to 
     // write to that view controller you'll have to locally instantiate 
     // it here: 
     ViewController *upcomingViewController = [segue destinationViewController]; 

     // You now have a solid reference to the upcoming/destination view 
     // controller. Example use: Allocate and initialize some property of 
     // the destination view controller before you reach it and inject a 
     // reference to the current view controller into the upcoming one: 
     upcomingViewController.someProperty = [[SomePropertyClass alloc] initWithString:@"Whatever!"]; 
     upcomingViewController.initialViewController = [segue sourceViewController]; 
     // Or, equivalent, but more straightforward: 
     //upcomingViewController.initialViewController = self; 
    } 
} 

ten zakłada, że ​​zarówno someProperty i initialViewController są syntetyzowane akcesorów kontrolera widoku docelowego. Mam nadzieję że to pomoże!

+0

podlega NDA, ale za 3 dni nie będzie oficjalnego wydania 14 października, ale podoba mi się odpowiedź +1: +1 –

+0

Próbowałem, co mówisz, ale właściwości na moim 'destinationViewController' nie aktualizują . Jakakolwiek rada? – Francesco

+0

Zakładam, że używasz syntezatora (nie prywatnego ivar) docelowego kontrolera widoku i że kontroler widoku jest już utworzony podczas ustawiania aplikacji (np. Storyboard z faktycznymi kontrolerami widoku umieszczonymi w nim, przejście między nimi wszystkimi tworzonymi instancjami @ app uruchomić). W takim przypadku powinien działać. Może to być coś takiego, jak system nie wiedzący o twoim przeznaczeniu. zobacz klasę kontrolera. Klasa ViewController w moim przykładzie jest podklasą UIViewController, a przed @implementacją robię coś w stylu "#import" ViewController.h "". Czy to może być jedna z tych rzeczy? – DarqueSandu

0

Co mogę używać w widoku źródła regulatora jest:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *upcomingViewController = [segue destinationViewController]; 
    upcomingViewController.view.tag = [[segue identifier] hash]; 
} 

A potem w kontrolerze widoku przeznaczenia używam (wykorzystanie na przykład w viewDidAppear)

if(self.view.tag == [@"MySeqgueIdentifier" hash]) 
{ 
    // Do something here... 
} 

To jest fajne, ponieważ nie musisz tworzyć żadnych właściwości itp. i wszystko działa poprawnie od kreatora interfejsu.