2012-04-03 15 views
1

Ich bin auf ein Problem mit einer SplitViewController-App gestoßen. Wenn ich eine Zeile aus der Tabelle in der Hauptansicht auswähle, ersetze ich die Detailansicht durch ein Ersetzen-Segment. Das Problem besteht darin, dass es jedes Mal eine neue Instanz erstellt/den Detailansicht-Controller neu lädt. Gibt es eine Möglichkeit, dass ich es haben kann, so wird es die Detailansicht mit der vorherigen Instanz ersetzen, wenn es bereits instanziiert wurde. Ich möchte, dass der Status für Detailansichten beibehalten wird, z. B. Eingabe in Textfelder.Ersetzen Sie das Segment, indem Sie eine neue Instanz erstellen

+0

Ich fange gerade an, mit dem iPad-Storyboard zu arbeiten (einschließlich Split-View-Controllern), aber gibt es kein Push-Segment, das Sie anstelle des Ersetzens verwenden können? Oder erlaubt das Framework Push in diesem Fall nicht? Dies funktioniert gut auf dem iPhone-Idiom. – Rob

+1

Ich versuchte Push, entschied aber, dass ich die Rückwärtsnavigation nicht wollte. Ich erinnere mich, dass auch jedes Mal eine neue Instanz erstellt wurde. Ich habe es irgendwie gelöst, indem ich jedes Detail ViewController als eine Eigenschaft auf dem Master ViewController deklariert und sie auf dem ersten Segment instantiiert habe. Dann rufe ich performSegue nicht auf und schiebe stattdessen manuell die Instanzen in die Detailansicht. –

+0

Ich würde auch gerne wissen, wie man Ersatzsegmente verwendet. Was ist der Unterschied zwischen einem Ersatzsegment und einem Push-Segment? Wenn der ersetzte View-Controller im Speicher verbleibt, wie kann er dann wiederhergestellt werden? – Matt

Antwort

2

Kann nicht gemacht werden. Ein segue instanziert immer einen View-Controller

1

ich die Segue ersetzen verwenden, aber in der MasterVC implementiere ich

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

    if ([identifier isEqualToString:@"showCalculatorViewController"]) { 

     if (self.splitViewController) { 

      NSObject *currentDetail = [self.splitViewController.viewControllers lastObject]; 

      if ([currentDetail isKindOfClass:[RootCalcViewController class]]) { 

.... 

Dann habe ich in den neuen Eigenschaften der vorhandenen VC füllen, und das Rück NO.

Aber ich habe keinen UINAvigationController als meine erste Detailansicht Controller, da ich die Navigation von den MasterVCs behandeln.

Auch in AppDelegate, didFinishLaunchingWithOptions die richtige Detail VC muss eingerichtet werden. Der generierte Code geht davon aus, dass es sich um einen UINavigationController handelt. Ähnlich in der generierten MasterViewController viewDidLoad. Dies erspart Ihnen einige App-Abstürze, wenn Sie das Detail UINAvigationController ersetzen.

Wenn ich verschiedene View-Controller lade, lasse ich die "Replace segues" ersetzen.

0

Oder - Sie könnten einfach Ihre DetailController implementieren Singleton Muster und Weiterleiten aller Anrufe an + neu, + Alloc oder dergleichen zu Ihrem Singleton-Methode.

Verwandte Themen