Frage

Viele Grüße! Ich habe eine Arbeits iPhone app (huzzah!), Die verwendet eine MainView.xib enthält eine voll ausgestattete UITabBar mit mehreren UINavigationController Objekte und Ansichten at-the-ready.

Ich habe nun gebeten worden, zu dieser Mischung eine einmalige Registrierung Ansicht hinzuzufügen. Diese Ansicht scheint vor UITabBar bei App-Start, ein paar Informationen von dem Benutzer erhalten, mit einem Server registrieren - oder Scheck für eine bestehende Registrierung, dann einige Daten Eichhörnchen weg im Schlüsselbund. (Wenn der Schlüsselbund bereits den Nachweis der Eintragung zeigt, dann überspringen wir diese besondere Ansicht zeigt.)

Die Anmeldung und Schlüsselanhänger Teil I unter Kontrolle haben ( Danke Erica Sadun für letztere! ), zeigt jedoch, dass die anfängliche einmalige Ansicht heikler erweist sich als ich erwartet hatte.

Ich vermute, ich bin zu nahe, um das Problem zu sehen, was los ist. Ich hoffe wirklich, ist es Pilotenfehler und erfordert nichts zu Rube Goldberg!

Hier ist das Szenario:

Die Anwendung beginnt durch Laden von MainView.xib , in der die zuvor erwähnte liegt UITabBar Regler, et. al. Aus Gründen der Argumentation, sagen wir, wir, dass die Registrierung Ansicht zeigen müssen. Auch möchten wir es eine modale Aussehen haben, so wird es von unten nach oben fliegen. Dann, wenn wir fertig sind, können wir sie entlassen, rufen Sie einen Delegierten (höchstwahrscheinlich die App Delegierter) und sagen, dass es mit dem Original tragen auf UITabBar .

// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];

// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];

Beachten Sie, dass RegistrationView.xib eine hat UIView nach innen, aber keine nav-Controller. Wir wollen es entkoppelt halten, so dass sie wiederverwendet werden können, sagen wir, als Teil der Registerkarte nav Controllers bar Artikel (Ihre Registrierungsdaten zu überprüfen, zum Beispiel).

bewegen etwas. Wir schaffen einen nav-Controller mit der Absicht der Dinge präsentiert modal:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];

Wir haben dann unsere modal VC präsentieren, mit der Tab-Leiste Controller als Basis, und lassen Sie die alloc'ed Bits.

[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];

Erste Beobachtung. Etwas sagt mir, das ist einfach nur schlampig. Sie können die erste Tab-Leiste Element sehen, Navigationsleiste und Blick erscheinen ebenso wie die modale Ansicht swoops in. Yeccch! Darüber hinaus die gewählte VC zu Null vorher keine Wirkung zu setzen versucht:

 tabBarController.selectedViewController = nil;

Wir sind wirklich nicht wollen / müssen die Tab-Leiste verwenden, bis nach die modale VC erfolgt (und wir haben die Delegierten zu helfen, lassen Sie uns wissen, wenn das passiert).

Warum bin ich stört auch mit der Tab-Bar? Nun, es sieht aus wie ich brauche etwas auf, dass die modalen VC Hut zu hängen, und ich weiß nicht, was sonst dort zu verwenden ist.

Ist dies der einzige Weg? Es scheint nur die Registrierung VC und die Tab-Bar unnötig zu anbinden, und es nur riecht ... falsch.

Clues willkommen / geschätzt!

War es hilfreich?

Lösung

Es ist schwer, dies zu beantworten, ohne zu wissen, was Ihre Default.png zeigt. Angenommen, Sie sind nach der HIG und es zeigt ein leeres TabBarController, würde ich eine etwas komplizierte Schichtung vorschlagen: Unteransicht: tabBarController.view Mitte Ansicht: UIImageView: Default.png Draufsicht: Anmeldung Ansicht unterhalb der Unterseite des Bildschirms positioniert

Beim Start, wenn Sie die Registrierung Ansicht zeigen müssen, animieren sie manuell nach oben, und sobald die Animation erfolgt die UIImageView darunter entfernen. Wenn die Registrierung abgeschlossen ist, animieren manuell die Registrierung Ansicht nach unten die TabBarController zu offenbaren. Wenn beim Start Sie nicht die Registrierung Ansicht benötigen, animiert nur die UIImageView zu verblassen (oder es nur entfernen).

OTOH Hand, wenn Sie nicht die HIG folgen und stattdessen eine Art von Splash-Screen zeigt, werden die Dinge ein wenig einfacher. Schicht wie folgt aus: Unteransicht: tabBarController.view Draufsicht: UIImageView: Default.png

Wenn Sie die Registrierung zeigen müssen, tun PresentModalViewController mit animierten: NEIN und dann die UIImageView ausgeblendet. Wenn nicht, nur die UIImageView ausgeblendet.

Das ist eine langwierige Erklärung w / o Bilder, hofft, dass es Sinn macht. Der springende Punkt ist, dass ich darauf hindeutet, das Hinzufügen einer UIImageView. Default.png das erste, was zu sein, die man sieht, wenn die Anwendung gestartet wird, und verwenden, die den Einstieg in Registrierung oder TabBarController entsprechend zu führen

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