Wie lege ich den Titel auf dem Zielansicht-Controller während prepareForSegue fest:

8

Ich möchte den Titel einfach auf meinem Zielansicht-Controller festlegen, so dass er in der Navigationsleiste des Navigationssteuerelements in der prepareForSegue: -Methode angezeigt wird, aber seinen Titel oder sein navigationItem wie folgt einstellen:

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

funktioniert möglicherweise nicht, weil die Ansicht des Ziel-View-Controllers noch nicht geladen ist. Kann ich dies tun, ohne einen benutzerdefinierten Zielansicht-Controller zu erstellen?

    
Steve Moser 22.07.2013, 15:57
quelle

4 Antworten

11

Versuchen Sie, auf Ihre ViewController , die in UINavigationController eingebettet ist, zuzugreifen. Zuerst geben Sie Ihrem Segment eine ID im Interface Builder, dann greifen Sie auf das Segment in der prepareForSegue -Methode zu und setzen den Titel, indem Sie auf die topViewController -Eigenschaft des Navigationscontrollers zugreifen, zu dem Sie navigieren.

%Vor%     
Julian Vogels 22.07.2013 16:18
quelle
1

Dies ist für einen Übergang in ein anderes UITableView

  1. Legen Sie eine öffentliche NSString-Eigenschaft in der UITableViewController-Zieldatei fest.

    @property (strong, nonatomic) NSString *navBarTitle;

  2. Überschreibe den Setter in der .m-Datei, um sicherzugehen.

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

  3. Übergeben Sie in der Sequence-Methode der tableView-Ausgabe die Zeichenfolge, die Sie im Titel benötigen.

    - (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. Und jetzt für das wichtige bisschen .... Rufen Sie im Ziel-Controller den obersten Controller der Ansicht ab und legen Sie nach dem Laden der Ansicht und vor der Anzeige die Eigenschaft title fest:

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

Mike Critchley 09.12.2015 18:33
quelle
1

Wenn Sie einen statischen Titel möchten, können Sie dies jetzt (in Xcode 4.6.3) im Storyboard tun, indem Sie einfach den Titel in der Navigationsleiste auf dem entsprechenden View-Controller setzen.

Wenn Sie jedoch möchten, dass sich der Titel der Navigationsleiste entsprechend der angezeigten Ansicht ändert, z. B. ein Detail einer bestimmten Tabellenzeile, soweit ich weiß, dass dies programmgesteuert erfolgen muss.

Ich brauchte IMMER (Neuling, Seufzer!), um herauszufinden, wie ich Julian Vogels 'richtige Antwort modifizieren kann, um den Schlüssel, den ich benutzen wollte, anzurufen. Folgendes hat funktioniert:

%Vor%     
user3528000 12.05.2014 22:23
quelle
0

Wenn das Segment ein Push-Segment ist - was bei Verwendung eines UINavigationControllers der Fall sein sollte - wird der Zielansichts-Controller automatisch zur Fensterhierarchie hinzugefügt, und Sie müssen nicht einmal den UINavigationController identifizieren:

%Vor%     
Clayton Andrew Cohn 14.03.2016 18:14
quelle