2010-12-07 12 views
0

Das ist die Situation:Neue Ansicht in einer Registerkarte beim Wechseln zu einer anderen Registerkarte

Ich habe eine Tab-Leiste mit 2 Registerkarten. Tab01 und Tab02. In TAB01 habe ich eine Taste, die repVC schiebt:

 
    repVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentModalViewController:repVC animated:YES]; 
    [(UIViewController *)[tabController.viewControllers objectAtIndex:0] setView:repVC.view]; 
    [repVC release]; 

Innen repVC habe ich eine andere Taste, die eine MFMailComposerViewController schiebt:

 
    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init]; 
    [self presentModalViewController:mail animated:YES]; 
    [mail release]; 

Das Problem ist: Wenn Mailview angezeigt wird (in tab01) und ich klicke auf Tab02, dann zurück zu Tab01, die MailView ist ausgeblendet und selbst wenn ich erneut auf die E-Mail-Schaltfläche klicke, wird die Ansicht nicht angezeigt.

Also, was ich habe, ist:

Tab01.view -> repVC.view -> mail.view

Für repVC, ich diese Linie verwenden, wenn ich die Ansicht drücken, so dass, selbst wenn ich Schalter Tabs gehen, wird diese Ansicht immer noch aktiviert werden:

 [(UIViewController *)[tabController.viewControllers objectAtIndex:0] setView:repVC.view];

Aber ich kann das gleiche für mail nicht tun, weil tabController in einer anderen Klasse deklariert ist, die ich nicht importieren kann. Daher kann ich nicht auf den tabController zugreifen und die Ansicht für Tab01 festlegen.

Ich hoffe, der Schnitt half das Verständnis.

Antwort

1

Hmm posten,

Ich würde noch vorschlagen, eine Navigation zu verwenden. Würde die Dinge viel einfacher machen, entspricht den Richtlinien und Vorschlägen von Apple und ist ziemlich schnell implementiert. (Erstellen Sie einfach einen Navigationscontroller, legen Sie die Ansicht von Tab1 als Hauptansicht fest und übergeben Sie sie dem TabbarController. Verwenden Sie für die MailView [self.navigationController pushViewController: mail animated: YES]; dann speichert der navcontroller die aktuelle Ansicht für Sie Wenn Sie aus irgendeinem Grund einen modalView-Controller verwenden müssen, können Sie entweder die Tableiste deaktivieren, während ModalView angezeigt wird, oder versuchen, einen Schalter oder einen einfachen if ... else-Fall in ViewWillAppear zu implementieren wo prüfen Sie, welcher Bildschirm geladen werden soll. Dann reinigen Sie das Fenster und laden Sie den rechten Bildschirm.

Hoffe, Sie bekommen die Idee, was ich meine, manchmal meine Art zu schreiben scheint die Menschen zu verwirren. ^^

+0

Arbeitete wie ein Charme. Ich habe einen NavigationController in Tab01 erstellt und nur benutzt, wenn ich die neue Ansicht verschieben musste. Hat gut funktioniert, da keine der Ansichten tatsächlich eine Navigationsleiste zeigt und die neue Ansicht die Tableiste ausblendet. Vielen Dank! –

+0

Oh, übrigens, ich habe '[navController presentModalViewController: repVC animiert: YES]; 'anstelle von' pushViewController' verwendet. –

+0

Ich bin froh, dass ich dir helfen konnte :-) – Amandir

0

Ein wenig mehr Informationen wäre großartig.

Wie haben Sie Ihren TabbarController eingerichtet?

Wie drücken Sie die neue Ansicht? Innerhalb eines UINavigationControllers? Wenn nicht, dann mach es mit einem navController, er sollte den aktuellen Stand der Ansicht speichern und dein Problem sollte gelöst sein.

Wenn u bereits ein NavController benutzen Sie bitte Ihre ViewDidLoad und ViewWillAppear des Viewcontroller von Tab 1

+0

Dort habe ich die Frage neu geschrieben. Ich hoffe es hilft. –

0

Wie @Amandir herausstellt, könnten Sie wahrscheinlich Ihre Probleme lösen, indem Sie eine UINavigationController verwenden. Ich habe das Gefühl, dass Sie versuchen, das Modal-View-Controller-Konzept ein wenig zu missbrauchen, und deshalb funktioniert es nicht so, wie Sie es erwarten. Wenn Sie presentModalViewController:animated: verwenden, sollte die Absicht sein, dass Sie eine Ansicht anzeigen, die modal ist, d. H.Der Benutzer muss interagieren und die modale Ansicht abbrechen, bevor sie fortfahren kann.

Was der obige Absatz bedeutet, dass wenn Sie einen modalen Ansicht Controller präsentieren nicht möglich sein sollte, die Tab-Leiste zu verwenden. Da Sie das Wort Push verwenden, vermute ich, dass Sie die Ansicht von Tab01 ändern möchten und trotzdem die Funktionalität der Tab-Leiste nutzen können. Das Problem ist, dass es außer UINavigationController keine eingebaute Methode zum Schieben von View-Controllern gibt. persentModalViewController:animated: sollte nur verwendet werden, wenn Sie eine modale Ansicht wünschen, die auf dem iPhone eine Vollbildansicht bedeutet.

Der einfachste Weg wäre wahrscheinlich eine UINavigationController zu verwenden und die Navigationsleiste auszublenden. Dann würden Sie die Funktionalität bekommen, nach der Sie suchen. Die andere Möglichkeit besteht darin, Unteransichten manuell hinzuzufügen und zu entfernen.

[self.view addSubview:repVC.view]; 

und

[repVC.view removeFromSuperview]; 
[self.view addSubview:mail.view]; 

können Sie Block Animationen verwenden, wenn Sie einige ausgefallene Übergänge wollen.

Verwandte Themen