UITabBarController: Wechseln Sie programmgesteuert zu einem anderen View-Controller

8

In meiner iPhone App, um die zuvor angezeigte Registerkarte wiederherzustellen, setze ich beim Start den setSelectedIndex: (auch versucht, setSelectedViewController: wie in der Dokumentation, aber ohne Erfolg)

Dies funktioniert unter iPhone OS 3.0 - jedoch wird unter OS 2.x der ausgewählte Index größer als 3 (die ersten 4 Registerkarten) nicht auf die erforderliche Ansicht umgeschaltet. Dies wird von Apple hier dokumentiert: Ссылка

Ich frage mich, ob es möglich ist, zu einem View-Controller unter iPhone OS 2.x zu wechseln? Jede Hilfe wird geschätzt.

Btw auf meinem Simulator Einstellungsindex größer als 3 wirft einen Fehler (für iPhone OS 2.x) - also habe ich dies in einem @try {..} @catch (id ..) {} Block gehüllt - hoffe das Technik hilft jemandem.

    
Ionic Walrus 08.07.2009, 00:00
quelle

3 Antworten

7

Vielleicht wird das helfen. Was ich getan habe, war den Index des ausgewählten Tab-Bar-Elements zu speichern. Wenn die App gestartet wird, überprüfe ich, ob die Nummer größer als 3 ist. Wenn es der Fall ist, setze ich den ausgewählten Tab-View-Controller als den mehr Navigations-Controller und dann den gespeicherten Index-Tab-View-Controller von dem mehr Navigations-Controller.

%Vor%     
user190302 15.10.2009 02:20
quelle
2

Ich arbeite an Version 2.

Mein Code sitzt hier und funktioniert wunderbar.

%Vor%     
John Ballinger 08.07.2009 01:43
quelle
2

Die UITabBarController-Dokumentation zu selectedIndex lautet:

  

Diese Eigenschaft repräsentiert nominell ein   Index in das Array der    viewControllers Eigenschaft. Allerdings, wenn   der ausgewählte View-Controller ist   derzeit die Mehr -Navigation   Controller, enthält diese Eigenschaft die   Wert NSNotFound . Dies einstellen   Eigenschaft ändert die ausgewählte Ansicht   Controller zu dem einen bei der   designierter Index in der    viewControllers array. Um das zu wählen    Mehr Navigation Controller selbst, Sie   muss den Wert der ändern    selectedViewController Eigenschaft   stattdessen.

     

In Versionen von iPhone OS vor   Version 3.0, spiegelt diese Eigenschaft wider   Der Index des ausgewählten Tab-Listenelements   only. Es wurde versucht, diesen Wert auf zu setzen   ein Index eines View-Controllers, der ist   nicht in der Tab-Leiste sichtbar, aber ist   stattdessen verwaltet von der Mehr -Navigation   Controller, hat keinen Effekt .

Wenn ich das richtig verstanden habe, müssen Sie stattdessen den Wert der selectedViewController -Eigenschaft ändern, aber Sie werden nur so weit gehen, den Mehr nav-Controller auszuwählen , kein VC in ihm. Aus den gleichen Dokumenten zu selectedViewController :

  

Dieser View-Controller ist derjenige, dessen   Die benutzerdefinierte Ansicht wird derzeit von angezeigt   die Tab-Leiste-Schnittstelle. Das angegebene   View Controller muss in der sein    viewControllers array. Zuweisen eines neuen   Zeigen Sie den Controller für diese Eigenschaft an   Ändert die aktuell angezeigte Ansicht   und wählt auch eine entsprechende Registerkarte aus   die Tableiste. Ändern der Ansicht   Controller aktualisiert auch die    selectedIndex Eigenschaft entsprechend.   Der Standardwert dieser Eigenschaft ist    nil .

     

In iPhone OS 3.0 und höher können Sie   Verwenden Sie diese Eigenschaft, um eines der folgenden Elemente auszuwählen   View Controller in der    viewControllers -Eigenschaft Dies   enthält View-Controller, die sind   verwaltet von der Mehr -Navigation   Controller und dessen Tab-Leiste Elemente sind   nicht in der Tab-Leiste sichtbar. Sie können   Verwenden Sie es auch, um Mehr auszuwählen   Navigation Controller selbst, was ist   verfügbar von der    moreNavigationController Eigenschaft.    Vor iPhone OS 3.0 konnten Sie   Wählen Sie nur die Navigation Mehr aus   Controller und die Teilmenge der Ansicht   Controller, deren Tab-Leiste-Element war   sichtbar. Versuch, dies zu setzen   Eigenschaft für einen View-Controller, dessen   Registerkartenelement war nicht sichtbar hatte keine   Wirkung.

Was eine Problemumgehung betrifft, frage ich mich, ob die Methode pushViewController:animated: des More Nav-Controllers hier nützlich sein könnte? Geben Sie jeder Ansicht eine eindeutige Tag-Nummer (die Sie hinter den Kulissen einer entsprechenden VC zuordnen können). Speichern Sie das Tag für die zuletzt aktive VC.

Wählen Sie zur Startzeit die entsprechende Ansicht in der Registerkarte Controller. Wenn das Tag der Ansicht nicht den VCs für die ersten vier Registerkartenelemente zugeordnet ist, muss es sich im Mehr -Nav-Controller befinden. Suchen Sie den VC, schieben Sie ihn auf den Stack des More nav Controllers und wählen Sie dann den More nav Controller aus.

Ich habe das nicht versucht, aber es könnte ein Experiment wert sein! Das einzige potentielle Problem (und es könnte ein großes Problem sein) ist, dass Sie VC drücken müssen, nachdem der Mehr nav Controller eingerichtet ist, nicht vorher.

    
Joe D'Andrea 19.08.2009 12:28
quelle