6

Beim Ausprobieren von Storyboards für eines meiner Projekte stieß ich auf etwas, für das ich keine gute Lösung habe.Wie schiebe ich einen ViewController, bevor ich den Modal View Controller mit Storyboards verwerfe?

Ich habe eine navigationsbasierte Anwendung, die einen UITableViewController zeigt. Die TabelleView wird mit von Benutzern erstellten Elementen gefüllt. Durch Tippen auf eine Elementzelle wird der Detailansicht-Controller aufgerufen. Der Benutzer kann ein neues Element erstellen, indem er auf eine Schaltfläche in der Tabellenansicht klickt. Dies führt zu einer modalen Ansicht, die die Erstellung übernimmt.

Wenn ein Benutzer mit dem Erstellen des Elements fertig ist und den Modalansicht-Controller beendet, möchte ich, dass der Benutzer den entsprechenden neuen Detailansicht-Controller und nicht die Tabellenansicht sieht. Aber ich kann nicht herausfinden, wie man das in Storyboards erreicht.

Hat jemand ein gutes Muster dafür?

aktuelle Situation

TableView --(tap create)--> creation modal view --(finish creating)--> TableView 

sein sollte

TableView --(tap create)--> creation modal view --(finish creating)--> detail view 
+0

Meine eigene Antwort unten hinzugefügt. Irgendwelche besseren Muster, die das mit Storyboards machen könnten, werden immer noch geschätzt. – SpacyRicochet

Antwort

0

Das beste Muster, das ich tun konnte, ist das gleiche wie das alte Muster im Code.

Fügen Sie dem Modalansicht-Controller eine Eigenschaft (nonatomic, weak) UINavigationController *sourceNavigationController hinzu. Wenn es Zeit wird, die modal-View-Controller zu entlassen, fügen Sie den folgenden Code ein:

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
detailViewController.element = newlyCreatedElement; 
[[self sourceNavigationController] pushViewController:detailViewController animated:NO]; 

Und um sicherzustellen, dass die sourceNavigationController richtig fertig, fügen Sie den folgenden Code in der prepareForSegue: des Tableview:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"newElementSegue"]) { 
     [[segue destinationViewController] setSourceNavigationController:self.navigationController]; 
    } 
} 
1

Sie können den Creating View-Controller in einen Navigations-Controller einfügen und den Creation View-Controller auch mit einem Push-Segment mit dem Detailansicht-Controller verknüpfen. Wenn Sie mit dem Erstellen der Daten fertig sind, wird es an eine Instanz des Detailansicht-Controllers weitergeleitet.

Wenn Sie von der Detailansicht direkt zur Tabellenansicht zurückkehren möchten, können Sie dem Detailansicht-Controller eine Eigenschaft hinzufügen, z. B. @property (nonatomic) BOOL cameFromCreationViewController;. Sie können diese Eigenschaft im Quellensicht-Controller in prepareForSegue: festlegen. In der Detailansicht machen Sie Ihre eigene Schaltfläche zurück, und wenn es angetippt wird, können Sie dies tun:

if(self.cameFromCreationViewController){ 
    [self.presentingViewController dismissViewController]; 
} 
else { 
    [self.navigationController popViewController] 
} 
Verwandte Themen