NavigationController in einer Subview

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NavigationController in einer Subview

    Hallo zusammen,

    ich versuche einen universalen "RevealController" zu schreiben, ähnlich wie bei der Facebook oder Twitter app und nutze dafür den Storyboard

    Zurzeit sieht die Hierarchie im InterfaceBuilder wie folgt aus:

    *First Responder
    *ViewController
    - Bottom View
    - Table View
    - Top View
    *Pan Gesture Recognizer

    Zum bewegen der Position nutze ich den Pen Gesture Recognizer. Klappt auch alles wunderbar. Nun habe ich aber folgendes Problem. Ich will die nächsten Views in nur der Top View laden und nicht komplett den ViewController ersetzen. Dafür wollte ich dort einen NavigationController erzeugen. Lange Rede kurzer Sinn, ich weiß leider nicht wie. Ich habe schon viel gesucht aber nicht wirklich was gefunden. Geht das überhaupt, denn ich habe gelesen dass man ein Controller in einem anderen Controller, vermeiden sollte, da es sonst zu Problemen bei der Orientation kommen kann etc. Aber wie machen das dann die anderen wie Facebook z.B.?

    Ich hoffe ich konnte das für euch halbwegs verständlich rüberbringen :)

    Beste Grüße
    Val
  • Moin,

    generell geht das schon. Bezüglich des Orientierungsproblems: nicht weiter schlimm, lässt sich mit CGAffineTransform gut fixen (man muss nur aufpassen, da sich das Koordinatensystem mit dreht).

    Wobei im Facebook App muss das noch nicht mal eine "echte" UINavigation sein. Was auch noch geht ist die NaviagtionBar vom Controller komplett abzukoppeln. So mach ich es meistens (auch mit der UITabBar), dann kann die NavigationBar oder Tabbar jede From annehmen und übrall sein - egal wo oder wie... dies erfordert aber einiges an Verständnis des View & Controller Systems.

    Kurz: Versuch es einfach erst mal mit deinen Mitteln, über den IB zum Bleistift, deine NavigationController zu erzeugen. Einfach mal versuchen ;)

    Gruß
  • Hey,

    danke für die schnelle Antwort, jedoch hilft mir das nicht wirklich weiter.

    Ich habe mich noch weiter eingelesen, und ich komme der Lösung immer näher. Es scheint so als bräuchte ich einen Custom Container welches seit iOS5 eingeführt wurde. Zu finden hier:

    - invasivecode.tumblr.com/post/1…rollers-part-i-one-of-the
    - oder WWDC 2011 Folge 102.

    Leider gibt es noch sehr wenig Info zu diesem Thema. Ich hab auch nur einen einzigen Beispiel gefunden, hier:

    - informit.com/articles/article.aspx?p=1760500&seqNum=12


    Okay nun weiß ich, dass ich eine Instanz von einem beliebigen Controller erzeugen kann und diesen als childController zu meinem Hauptcontroller hinzufügen kann. Das ist genau das was ich brauchte. Also noch mal kurz zusammen gefasst:


    Quellcode

    1. UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"bla" bundle:[NSBundle mainBundle]];
    2. UIViewController * myNavigationControllerContent = [myStoryboard instantiateViewControllerWithIdentifier:@"NavContent"];
    3. UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: myNavigationControllerContent];
    4. nav.view.frame = topView.bounds;
    5. [self addChildViewController:nav];



    Ich muss zugeben ich habe es noch nicht ausprobiert, weil es für mich noch etwas verwirrend ist. Ich stelle mir das so vor, dass der NavContent ist einfach ein zusätzlicher UIViewController im storyboard. Oder muss es dann wiederum auch ein NavigationController im Storyboard sein, und der NavContent wäre dann die rootView die damit verknüpft ist? Denn eine direkte Subclass von dem NavigationController kann/darf man nicht machen so wie ich verstanden habe, oder?

    Danke für die Hilfe

    Beste Grüße
  • val schrieb:

    Ich muss zugeben ich habe es noch nicht ausprobiert, weil es für mich noch etwas verwirrend ist. Ich stelle mir das so vor, dass der NavContent ist einfach ein zusätzlicher UIViewController im storyboard. Oder muss es dann wiederum auch ein NavigationController im Storyboard sein, und der NavContent wäre dann die rootView die damit verknüpft ist? Denn eine direkte Subclass von dem NavigationController kann/darf man nicht machen so wie ich verstanden habe, oder?
    Musst du nicht, glaube ich. Mit dem Storyboard habe ich mich noch nicht tief genug befasst. Du benutzt ja den "NavContent" als Wrapper für dein Storyboard und der wird ja von deinem UINavigationController gehalten.