Wie erstellen Sie physische Menü-Taste (wie in Android) - Menü im iPhone?
-
25-10-2019 - |
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.
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:
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.
In der
ContainerController
'sviewDidLoad
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.