AutoRotation (bei NavigationBased Application)

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

  • AutoRotation (bei NavigationBased Application)

    Hallo!

    Ich habe jetzt lange gesucht und bin einfach auf keine gescheite Lösung für mein Problem gestoßen:

    Mein App ist eine NavigationBased App. Sie hat also ein View Controller und einen NavigationController. In der View ist eine TableView. Soweit so gut. Jetzt würde ich gerne die App dazu bringen, dass sich die NavigationBar und die TableView drehen, wenn ich das iPhone drehe. Aus diesem Grund habe ich eine eigene Klasse erstellen, welche von UINavigationController abgeleitet ist. Bei dieser Klasse habe ich folgendes eingestellt:

    Quellcode

    1. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    2. // Return YES for supported orientations
    3. return YES;
    4. }



    Trotzdem dreht sich die NavigationBar einfach nicht. Darauf habe ich das gleiche für den ViewController gemacht, welcher der View meines Windows zugewiesen wird. Eigener ViewController, welcher von UIViewController abgeleitet ist und dann anschließend die Methode wie oben angepasst.

    In meiner Info.plist Datei habe ich auch alle Orientations hinzugefügt. Was kann ich noch tun??

    Tr
  • Du musst beim NavigationController nichts machen. Der rotiert automatisch mit, wenn der ViewController, der gerade angezeigt wird, eine Rotation zulässt. Also in deinem TableViewController, der im NC hängt (wenn ich das richtig verstanden habe) in - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation ein YES zurückgeben.

    Gruß
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Komischerweise funktioniert das irgendwie nicht. Habe genau das gemacht, was du gesagt hast. Ich habe ja nur 3 Views.

    1.) Die View des Windows der App
    2.) Die View des TableViewControllers
    3.) Die View des NavigationControllers.

    Egal in welchem ich diese Methode nutze, es funktioniert nicht. :(
  • • Xcode aufmachen
    • "Neues Projekt..." klicken
    • Navigation Based App (iPhone) auswählen
    • speichern
    • in "RootViewController.m" in shouldAutorotateToInterfaceOrientation: immer YES zurück geben
    • Kompilieren und starten
    • Funktioniert

    ;)
    Widgetschmie.de • Life is too short for gadgets
  • Gibt es vllt. irgendein Grund, weshalb das deaktiviert sein könnte??

    Hier mein Code aus der App-Delegate:

    Quellcode

    1. -(void)showMenu:(UIViewController *)formarViewController {
    2. MenuController *localTableViewController = [[MenuController alloc] initWithStyle:UITableViewStyleGrouped];self.localNavigationController = [[MainNavigationController alloc] initWithRootViewController:localTableViewController];
    3. [[localTableViewController navigationController] navigationBar].tintColor = UIColorFromRGB(0x8F0000);
    4. [localTableViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    5. [formarViewController presentModalViewController:localNavigationController animated:YES];}



    MenuController ist vom Typ UITableViewController (Mein Menü)
    MainNavigationController ist vom Typ UINavigationController

    Zuerst wird ein kleiner Login-Screen angezeigt. Wenn der User dann auf den Knopf drückt, wird diese Methode (siehe oben) ausgeführt und das Menü wird angezeigt.
  • Also wie ich gerade gehört habe, ist wohl das Problem, dass man ViewController nicht schachteln sollte. Also nicht der View eines ViewControllers eine View hinzufügen, welche wieder einen eigenen ViewController haben. Zumindest ist das laut Apple ein Problem. Scheinbar bekommt nämlich nur der oberste ViewController die Information und müsste diese händisch weiterreichen.

    Ich muss es leider so bauen. Zwar wäre einen navigation based app auch gut, aber ich möchte auf z.B. auf dem ersten Screen keine Navigation oben haben. Daher kommt da keine NavigationBased-App in Frage. :(

    Grüße...
  • Ah jetzt weiß ich wieder, warum ich das gemacht habe... sorry! Hatte mich vertan.

    Wenn ich es so gemacht habe, war immer auf dem ersten Screen mein Login-Fenster, danach kam dann mein 2. Fenster mit Navigationbar und so. Alles schön und gut. Aber Problem war dann, dass ich vom 2. Screen über den Backbutton wieder zurück zum Loginscreen kommen konnte. Ich glaube, das hätte ich nur unterbinden können, indem ich den "Back-Button" ausblende. Oder?? Und das habe ich irgendwie nicht hinbekommen. :( ;(

    Bin aber dankbar für einen Rat ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Vivid ()

  • Dann mach doch einen Navigation-Controller und blende deinen Ersten Screen als modalView ein, nicht animiert, dann sieht der User zu Beginn nur diesen modalen Screen. Wenn der Weggeht hast du dann den Navigation-Controller und der User kann den Startscreen nicht wieder hervorrufen.
    Widgetschmie.de • Life is too short for gadgets
  • Ja jetzt stehe ich wieder von einem kleinen Problem. :P

    hab es mit Navigation Based gemacht. Nun habe ich zwei XIB-Files. Das eine ist nur für meine TableView. Wenn ich jetzt das erste mal eine Instanz von dieser TableView erzeuge, möchte ich eine Eigenschaft setzen. Ich kann aber irgendwie nicht auf das Object der TableView zugreifen. Die Verbindung wurde ja im InterfaceBuilder hergestellt.

    Ich habe schon unter: developer.apple.com/iphone/lib…/Reference/Reference.html

    geschaut. Dort wird der Bereich mit Custom Content im Schaubild beschrieben. Aber wie kann ich darauf zugreifen? ViewDidLoad in TableView ist in meinen Augen der falsche "Ort" zum setzen der Variable.

    Danke!
  • HI,

    korrigiere mich bitte wenn ich dich falsch verstanden haben: Ich soll jetzt in der ViewDidLoad Methode vom RootViewController das reinschreiben? Der RootViewController ist mein TableViewController.

    Für mich ist das eigentlich schon zu spät, da ich dort schon Sachen mache (wie z.B. das Festlegen auf Menü-Einträge). Dort mache ich z.B. auch eine Fallunterscheidung, ob es sich um die erste Ebene handelt oder nicht. Daher hätte ich gerne von Außen einen Wert gesetzt namens "currentLevel". Würde ich diesen Wert in ViewDidLoad setzten, hätten alle späteren Instanzen des RootViewControllers diesen Wert. Und ich brauch für jede Menü-Ebene eine solche Instanz. :)

    Grüße
  • Ich hatte überlesen, dass du auf "tableView" zugreifen willst. Diese ivar ist in der viewDidLoad bereits gesetzt, zugewiesen wurde diese in der loadView des UITableViewControllers.

    Wozu brauchst du "currentLevel" denn? Übergib dem ViewController doch einfach die Objekte, welche er darstellen soll, als Array, dann kann es ihm egal sein, welches Level er hat. ;)
    Widgetschmie.de • Life is too short for gadgets
  • ja das ist ja indirekt mein ansatz. Bei der 2. Ebene, etc. wo ich programmatisch einen ViewController erzeuge, verstehe ich das ja auch.

    Aber bei der 1. Ebene weiß ich nicht, wie ich ihm etwas übergeben soll. Greife ja nirgendwo drauf zu.