12

Używam tej funkcji do przełączania widoków w Xcode 4.3.Przekazywanie zmiennych między kontrolerami widoku

[self performSegueWithIdentifier:@"NextView" sender:self]; 

Chciałbym przekazać niektóre parametry między stronami. Jak mogę to zrobić?

+0

nie u spróbował wykorzystać kontroler nawigacyjny zamiast. bardzo proste jest przekazywanie wartości – WaaleedKhan

+0

nie, nie próbowałem kontrolera nawigacyjnego. Używam zwykłego przycisku i segue w scenorysie. – bla0009

Odpowiedz

40

Po performSegueWithIdentifier:sender: Twój widok kontroler będzie zadzwonić

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

zakładając, że nowy kontroler widok ma jedne właściwości do ustawienia:

if ([[segue identifier] isEqualToString:@"NextView"]) { 
    MyViewController *myVC = [segue destinationViewController]; 
    myVC.propertyToSet = // set your properties here 
} 
+0

, więc ustawiam właściwość tak, jak powiedziałeś i jak mogę odczytać wartość z tej właściwości. A także, co jeśli muszę przekazać wiele zmiennych do następnego widoku? – bla0009

+0

Dla wielu zmiennych użyj wielu właściwości i odczytaj z właściwości use ... = self.property (w twoim widoku kontrolera, w którym zdefiniowałeś tę właściwość) – Pfitz

+0

Rozumiem to, ale nie jestem pewien jak uzyskać te dane w " NextView ". – bla0009

5

To pytanie ma bardzo ładny i poprawnego wyjaśnienia danych przepływających między widzenia regulatorów:

Passing Data between View Controllers

+1

Tak, jest dobrze wyjaśnione na tej stronie, ale używają one pushViewController do zmiany widoku, ale chciałbym użyć performSegueWithIdentifier. – bla0009

3

Oto odpowiedź od Pfitz, ale zrobiłem to trochę łatwiejsze do zrozumienia dla ludzi, którzy są nowicjuszami w Objective-C za pomocą przykładu:

  1. W pliku destinationViewController.h dodać ustawienie właściwości dla zmiennej 'otrzymać' wartość z pliku źródłowego controller.m

    @property (nonatomic) int billIdReceivingVote; 
    
  2. importować destinationViewController.h do pliku sourceViewController.m:

    // VOLViewController.m 
    #import "VOLVoteViewController.h 
    
  3. Dodaj prepareForSegue metody do pliku sourceViewController.m i przekazać zmienne

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        VOLVoteViewController *myDestinationViewController = [segue destinationViewController]; 
    
        // myDestinationViewController.variable = sourceViewController variabe 
        myDestinationViewController.billIdReceivingVote = [self.idOfBillSelected intValue]; 
    } 
    
Powiązane problemy