2017-06-05 8 views
0

Gibt es eine Möglichkeit, von einem UIView, der Teil eines UIViewController ist, zu einem anderen UIViewController zu navigieren, weder mit Storyboards noch mit Navigationssteuerungen?Navigieren von UIView zum UIViewController ohne Storyboard und Navigationscontroller

Ich habe eine UITapGestureRecognizer, die ich zu einem anderen UIViewController (BuyController()) navigieren möchte, wenn es einmal angezapft wird. Dementsprechend sieht mein Code wie folgt aus:

//handle singleTap 
func singleTapOnLikesDetected(_ sender: UITapGestureRecognizer) { 

    print("check") //works 
    let toController = BuyController() 
    BarController().pushViewController(toController, animated: true) //error occurs since BarController is no navigationcontroller 

} 

BarController (UITabBarController, UITabBarControllerDelegate) mein RootViewController im AppDelegate.swift ist. Die UIView gehört jedoch zu einer anderen UIViewController namens HomeController (UIViewController, UIScrollViewDelegate). Ich verwende keine Storyboards, und ich würde es gerne so behalten, da ich an einem Projekt in einem Team arbeite (daher wäre eine programmatische Lösung sehr willkommen) ...

Antwort

2

Sie können einfach tun dies zu navigieren, ohne navigationController mit:

self.present(toController, animated: true, completion: nil) 

Oder diese,

UIApplication.shared.keyWindow?.rootViewController?.present(toController, animated: true, completion: nil) 
+0

ich einen Fehler sagen 'Wert vom Typ‚CurrentClass‘[self] hat kein Mitglied presentViewController.'' presentViewController' scheint durch "gegenwärtig" ersetzt worden sein. Trotzdem bekomme ich den gleichen Fehler ... Wenn ich 'self' durch' HomeController() 'ersetze, bekomme ich den Fehler' Versuch, auf darzustellen, dessen Ansicht nicht ist in der Fensterhierarchie! ' – Moritz

+0

siehe aktualisierte Antwort @Moritz – Maddy

+0

hast du dieses 'func singleTapOnLikesDetected (_ sender: UITapGestureRecognizer)' in 'UIVIEW' Unterklasse hinzugefügt – Maddy

1

Nur UIViewControllers können andere UIViewControllers nicht UIViews präsentieren, damit Ihr nicht das vorliegende Verfahren auf der UIView finden. Sie können self auch nicht mit HomeController() ersetzen, da dies einen neuen HomeController mit eigener UIView erzeugt, der zu keiner anderen Ansicht hinzugefügt wurde (wie der Fehler vermuten lässt).

Sie haben ein paar Optionen wirklich:

1) Erstellen Sie ein Protokoll/Delegierten auf UIView und die Homecontroller, um es anzupassen machen. Dann kann die UIView die Methode im Protokoll aufrufen und der HomeController die eigentliche Umschaltung vornehmen.

2) Man könnte die Wurzel-View-Controller erhalten die neue UIViewController wie folgt vorstellen: UIApplication.shared.keyWindow?.rootViewController?.present(viewController, animated: true, completion: nil)

Verwandte Themen