2011-11-24 13 views
6

Zastanawiam się, jak poprawnie użyć storyboardu, aby modalnie ustawić kontroler widoku. Osobiście wolę pracować z Xibs, ale wydaje się, że storyboard zyskuje na popularności i będzie sposobem na przyszłość.Jak poprawnie używać modalnego kontrolera widoku przy użyciu storyboardu xcode 4.2

Sposób, w jaki normalnie ustawilibyśmy kontroler widoku modalnie, wyglądałby następująco: załóżmy, że mamy ViewControllerA (krótka A) i ViewControllerB (krótka B). Wówczas normalnie umieściłbym protokół w B.h określający metodę delegata, gdy B chce zostać zwolniony i dodać pole id<theProtocol> delegate jako właściwość assign. Zakładając, że jestem zajęty w A i chcę przedstawić B modally, chciałbym napisać:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; 
b.delegate = self; 
[self presentModalViewController:B animated:YES]; 

Korzystanie z storyboard, wiem, że to możliwe, aby umieścić na inny kontroler widoku w modalnego sposób przez CTRL-przeciąganie z przycisk do kontrolera view i wybór modalu jako typu przejścia. Po prostu się zastanawiam; gdzie ustawić delegata nowego kontrolera widoku? Jaka jest poprawna praktyka przekazywania rzeczy do kontrolera widoku modalnego? I naprawdę nie wiem, co cała sprawa z segues jest ...

Odpowiedz

5

Spójrz na thistutorial

Według niego, należy ustawić delegata następująco:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
      segue.destinationViewController; 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      [[navigationController viewControllers] 
       objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

Gdzie @ "AddPlayer" to nazwa 'modalnego' segmentu

+1

Spojrzałem na samouczek i oczywiście nie mam żadnej korzyści w wątpieniu w twoją odpowiedź, ale czy nie zgodziłbyś się, że jest to o wiele brzydszy kod niż poprzedni? Po prostu wydaje mi się, że takie kłopotliwe czynności są naprawdę łatwe ... – Warkst

+1

Nie używaj scenorysów, jeśli wydaje ci się to brzydkie –

+1

To jest główny powód, dla którego nie używam ich teraz, po prostu "boję się" staną się głównym sposobem, aby to zrobić w przyszłości. – Warkst

0

Zamiast korzystać z kontrolera nawigacji, możesz bezpośrednio użyć obiektu UIStoryboardSegue przekazanego w prepareForSegue. Ma właściwość o nazwie destinationViewController, która jest kontrolerem widoku, który jest tworzony. Uważam, że o wiele czystsze. To jest przykład.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      (PlayerDetailsViewController *) segue.destinationViewController; 

     playerDetailsViewController.delegate = self; 
    } 
} 

IMO Myślę, że storyboardy są świetne, ponieważ działają jak wzorzec aplikacji. Nigdy też nie lubiłem stalówek. = D

+0

Och, czekaj. Poprzednia odpowiedź zrobiła to, ale przypisali kontroler widoku celu do kontrolera widoku nawigacyjnego, którego nie musisz robić (nie wiem nawet, czy to działa ...). –

Powiązane problemy