Frage

Ich entwickle eine navigation-basierte Anwendung in den iPhone.

In die ich erstellen möchten, physische Menü-Taste, wie Menü, wie in Android-Handys.

Sie können das Menü aus einer beliebigen Ansicht in der Hierarchie.

Tun Sie haben keine Idee, wie können wir das erreichen .

Können wir hinzufügen eine Schublade wie Menü, um UINavigationBar ?

Bitte nicht schlagen die tabbarcontroller, wie es ist die Letzte option.

War es hilfreich?

Lösung

Was Sie tun sollten, ist eine Unterklasse von zu erstellen UIViewController, z.B MasterViewController. Haben Sie alle Sehen Controller -Unterklassen MasterViewController. In dem MasterViewController Sie können Code schreiben, um Ihre Schubladenansicht zu erstellen und anzuzeigen. Anschließend erben alle Ihre Ansichtscontroller diesen Code und können ihn zu jedem Zeitpunkt auf sich selbst aufrufen.

Um die Ansicht in: zu schieben:

drawerView.frame = CGRectMake(0, -1*drawerView.frame.size.height, self.view.frame.size.width, whateverHeight);
[UIView beginAnimations:nil context:NULL];
drawerView.frame = CGRectMake(0, 0, self.view.frame.size.width, whateverHeight);
[UIView commitAnimations];

Andere Tipps

Ich denke, dass das, was Sie wollen, nur den Titelbericht von uInAvigationItem auf eine willkürliche UIView festlegen, um Benutzerverschlüsse zu verarbeiten.

Das muss kein Textetikett sein :)

Wenn das der Fall ist, würde ich vorschlagen, dass Sie einnehmen sharedInstance Mit Flags verfolgt die Hierarchie des View Controller -Stacks. Jedes Mal, wenn Benutzer navigieren sharedInstance und führen Sie die benutzerdefinierte Menüvorbereitung durch und füllen Sie es aus. Die gute Praxis wäre die Wiederverwendung Ihrer UI -Komponente, anstatt sie bei jedem Navigationsvorgang neu zu machen.

Sie können eine "erstellen"DrawerView"Klasse und importieren Sie es in den Ort, an dem Sie es verwenden möchten. Dann können Sie verwenden presentModalViewController: myDrawer Damit es angezeigt wird, wenn Sie es brauchen. Hoffe das macht Sinn.

Es ist sehr einfach..

In einem XIB können Sie viele Ansichten richtig hinzufügen. Fügen Sie nun zwei Hauptansichten hinzu, z. B. die Datenansicht und die Abwärts -Button -Ansicht, die Sie möchten. und alle anderen Hirarchie von Ansichten, die Sie in dieser Datenansicht hinzufügen können.

Ich denke, Sie sollten einen Singleton erstellen UIViewController oder UIView dafür. Vorteil der UIViewController ist, dass es mit dem präsentiert werden kann presentModalViewController:animated: Methode, und wenn Sie benötigen, können Sie es auf Ihren Navigationsstapel schieben. Auch ein Vorteil, dass Sie eine haben UIView Instanz gleichzeitig.
Mit dem Singleton -Muster können Sie Ihre Klasse überall erreichen.

Überprüfen Sie diesen Link aus der offiziellen Dokumentation über Singleton in Objective-C: Erstellen einer Singleton -Instanz
Oder Sie können das Makro von Matt Gallagher verwenden (da dies sehr bequem zu verwenden ist): Singleton -Makro

Wenn Sie iOS 5 beta, ich kann es nur wärmstens empfehlen.Die neue beta-dev-release eine Erweiterung auf UIViewController, nannte Apple als container-view-Controller.Sie sind sehr einfach einzurichten, und ich bin mit meiner app.

Container-view-Controller arbeiten wie UINavigationControllers und UITabBarControllers Sie ermöglicht das hinzufügen von untergeordneten Ansicht Controller, nicht nur untergeordneten Ansichten.Wie ich schon sagte, Sie sind einfach zu set up.Ich werde erklären, wie man:

  1. Erstellen Sie eine neue Klasse namens ContainerController.Fügen Sie eine Initialisierungs-Methode genannt - (id)initWithNavigationController:(UINavigationController *)controller.Die Implementierung sollte in etwa so Aussehen:

    if ((self = [super init])) {
      [self addChildViewController:controller];
      controller.view.frame = CGRectMake(0, 0, 320, 420); // Leave room for the menu at bottom of the screen
      [self.view addSubview:controller.view];
    }
    

    Der Grund fügen wir eine navigation-controller ist, da hält es dieser container-controller zu tun, übergänge, die ist mehr kompliziert.

  2. In der ContainerController's viewDidLoad Methode, erstellen Sie im Menü:

    [super viewDidLoad];
    
    UIView *menuWrapperView = [[[UIView alloc] init] autorelease];
    menuWrapperView.frame = CGRectMake(0, 420, 320, 40); // Place a wrapper for the menu buttons directly below the navigation controller
    
    UIButton *button1 = ...;
    UIButton *button2 = ...;
    
    [menuWrapperView addSubview:button1];
    [menuWrapperView addSubview:button2];
    
    [self.view addSubview:menuWrapperView];
    

Mit diesem Ansatz (mit child-view-Controller), Ihre Ansichten und navigation controller wird Ihre benötigten Speicher Warnung anzeigen laden, und die Drehung der Handhabung-Methode aufruft, wenn nötig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top