2016-06-07 13 views
2
Navigation

Dies ist die aktuelle Situation:verderbte Navigationsleiste nach

UITabBarController 
    UINavigationController 
     UIPageViewController 
      Some UIViewControllers (the actual content) 

So ist der UIPageViewController einige UIViewControllers enthält, die alle eine UITableView enthalten.

This is what the Apps looks like

Wenn ich eine der Zeilen in der UITableView klicken Sie auf die UIViewController die didSelect Methode aufruft. Das Verfahren sieht wie folgt aus:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    let activity = self.activities[indexPath.row - 1] 
    self.delegate?.dayTableViewSelectedActivity(activity, sender: self) 
} 

Dann wird das UIPageViewController das Protokoll implementiert, so dass die delegierte Methode aufgerufen wird. Die Methode sieht so aus:

func dayTableViewSelectedActivity(activity: Activity, sender: DayTableViewController) { 
    self.performSegueWithIdentifier("openDetails", sender: activity) 
} 

Die App navigiert (schiebt) dann zu einem DetailViewController. Wenn ich zurückwische (Standardverhalten von iOS), wird der DetailViewController ohne die Animation sofort zum UIPageViewController angezeigt. Dann ist meine Navigationsleiste kaputt und enthält einen Zurück-Button, der dort nicht hingehört, weil ich nicht weiter zurück gehen kann.

Broken navigation bar

Wenn ich eine Zelle klicken Sie erneut auf die Konsole gibt mir eine nested push animation can result in corrupted navigation bar Nachricht. Jede Aktion, die ich von dort gibt mir mehr Konsole Fehler wie:

nested pop animation can result in corrupted navigation bar 
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 

Dieser Fehler mich jetzt stundenlang ist frustrierend, und ich kann nicht herausfinden, was ich falsch mache. Es gibt keine doppelten Übergänge. Ich habe es mehrmals überprüft. Ich hoffe, ihr könnt mir helfen.

Antwort

1

Sie werden sicherstellen wollen, dass Sie, wenn Sie zurück zum PageViewController navigieren, die Option Abwickeln verwenden verwenden. Dadurch wird der TableViewController vom Anfang des Stapels entfernt und Sie kehren zum PageViewController zurück. Hier ist ein anständiger Artikel darüber, wie es in Swift verwenden“

https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/

+0

Danke! Ich werde versuchen, wenn ich nach Hause komme. Ich werde Sie auf dem Laufenden halten. –

+0

Leider hat es nicht funktioniert. In der Anleitung tun sie ein Programm programmgesteuert abwickeln, aber ich jus Ich möchte das Standardverhalten von iOS (wenn Sie in einem UINavigationController nach rechts wischen, gehen Sie zum vorherigen Ansichtscontroller). Wenn ich also in meinem DetailViewController nach rechts wische, möchte ich zurück zum UIPageViewController. –