2013-07-22 9 views
8

Chcę po prostu ustawić tytuł na moim kontroler widoku docelowego tak, aby wyświetlał na pasku nawigacyjnym kontrolera nawigacji w metody prepareForSegue: jednak ustawienie jej tytułu lub nawigacjiItem tak:Jak ustawić tytuł na docelowym kontroler widoku podczas prepareForSegue:

[segue.destinationViewController setTitle:@"doesn't work"]; [segue.destinationViewController.navigationItem setTitle:@"this either"];

nie działa prawdopodobnie dlatego, widok miejsca docelowego widoku kontrolera nie jest jeszcze załadowany. Czy mogę to zrobić bez tworzenia niestandardowego kontrolera widoku miejsca docelowego?

Odpowiedz

11

Spróbuj uzyskać dostęp do swojego ViewController, który jest osadzony w urządzeniu podobnym do tego . Najpierw należy podać identyfikator segue w konstruktorze interfejsów, a następnie uzyskać dostęp do segue w metodzie prepareForSegue i ustawić tytuł, uzyskując dostęp do właściwości kontrolera nawigacyjnego, który przenosisz.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourSegueIdentifier"]) { 
     UINavigationController *navController = 
      (UINavigationController*)[segue destinationViewController]; 
     YourViewController *destViewController = 
      (YourViewController*)[navController topViewController]; 

     destViewController.navgationItem.title = @"Your title"; 

    } 
} 
+2

Dzięki.To nie był dokładnie mój problem, ani to rozwiązanie nie działa dla mnie, ale przypomniało mi, że kontroler widoku źródłowego znajduje się w widoku kontenera, który znajduje się wewnątrz kontrolera widoku nawigacyjnego. Musiałem więc odwołać się do poprawnego kontrolera nawigacyjnego w moim stosie widoków. –

+0

Steve, czy możesz opracować, w jaki sposób odwoływałeś się do właściwego kontrolera nawigacyjnego? –

1

Jeśli chcesz statyczny tytuł ten może teraz (czyli w Xcode 4.6.3) Można to zrobić w serii ujęć poprzez ustawienie tytuł w pasku nawigacyjnym na danym kontrolerze widoku.

Jeśli jednak chcesz, aby tytuł paska nawigacji zmieniał się w zależności od tego, do którego widoku jest przypisany, na przykład, szczegół określonego wiersza tabeli, o ile wiem, że należy go ustawić programowo.

Zajęło mi FOREVER (newbie, westchnienie!), Aby dowiedzieć się, jak zmodyfikować poprawną odpowiedź Juliana Vogelsa, aby zadzwonić do klucza, którego chciałem użyć. Oto co pracował:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"DetailSegue"]) { 
     // Fetch Item 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSDictionary *item = [self.groceries objectAtIndex:[indexPath row]]; 
     // Configure Detail View Controller 
     TPDetailViewController *vc = [segue destinationViewController]; 
     vc.navigationItem.title = [item objectForKey:@"name"]; 
     [vc setItem:item]; 
} 
1

To jest dla segue na inny UITableView

  1. Ustaw publiczną właściwość NSString w pliku docelowego UITableViewController.

    @property (strong, nonatomic) NSString *navBarTitle;

  2. przesłonić seter w pliku .m tylko aby się upewnić.

    - (void) setNavBarTitle:(NSString *)navBarTitle { _navBarTitle = navBarTitle; }

  3. W pochodzącej metody Segue Tableview za przechodzą ciąg cokolwiek trzeba w tytule.

    - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString: @"userDetails"]) { UsersActivitiesTableViewController *destinationController = segue.destinationViewController; //Get the index path of the cell the user just clicked NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; //Grab the object from the array of users if the next view requires a specific title for a user name etc. UserMO *thisUser = [self.users objectAtIndex:indexPath.row]; //Pass the string you want as the title to the public NSString property destinationController.navBarTitle = thisUser.name; } }

  4. A teraz ważny bit .... w kontrolerze docelowym, dostać górny kontroler widoku i ustawić właściwość tytułu, po widok jest załadowany, a zanim został on wyświetlane:

    - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController topViewController].title = self.navBarTitle; }

0

Jeśli segue jest segue Push - które powinny być, jeśli używasz UINavigationController - wtedy sterownik widok docelowy jest automatycznie dodane do hierarchii okna i nie musisz nawet identyfikować UINavigationController:

if ([segue.identifier isEqualToString:@"yourSegueNameHere"]) {  
    [segue.destinationViewController setTitle:@"yourTitleHere"]; 
}