2010-12-07 41 views
0

這種情況:當切換到另一個選項卡時在標籤中保留新視圖

我有一個帶有2個選項卡的選項卡欄。 Tab01和Tab02。 在Tab01我有一個按鈕其推動repVC:

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

裏面repVC我有另一個按鈕其推動一個MFMailComposerViewController

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

的問題是:當顯示mailView(在Tab01)然後單擊Tab02,然後返回到Tab01,mailView被隱藏,即使再次單擊電子郵件按鈕,視圖也不會顯示。

所以我有什麼是:

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

repVC,我用這條線時,我推的觀點,這樣即使我去開關選項卡,這一觀點仍然會被激活:

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

但我不能這樣做郵件,因爲tabController是在另一個我不能導入的類中聲明的。所以我無法訪問tabController併爲Tab01設置視圖。

希望編輯有助於理解。

回答

1

HMM的視圖控制器的viewWillAppear中,

我還是會建議使用Navigationcontroller。會讓事情變得更容易,符合蘋果的指導方針和建議,並且實施得非常快。 (只需創建一個Navigationcontroller,將Tab1視圖作爲主視圖,然後交給TabbarController,然後爲mailView使用[self.navigationController pushViewController:mail animated:YES];然後navcontroller爲你保存當前視圖當你切換標籤)

但是,如果由於某種原因你必須使用modalViewcontroller,你可以在顯示ModalView時停用tabbar,或者嘗試在你的ViewWillAppear中實現一個開關或一個簡單的if ... else情況你在哪裏檢查要加載的屏幕。 然後清理窗口並加載正確的屏幕。

希望你明白我的意思,有時候我的寫作方式似乎讓人困惑。 ^^

+0

像魅力一樣工作。我在Tab01內部創建了一個NavigationController,並且只有在我必須推送新視圖時才使用它。工作得很好,因爲沒有一個視圖實際顯示NavigationBar,新視圖隱藏了TabBar。謝謝! – 2010-12-09 16:05:39

0

多一點信息會很好。

你是如何設置你的TabbarController的?

你如何推新視圖?在UINavigationController中?如果沒有,那麼用navController來做,他應該保存實際的視圖狀態並且你的問題應該被解決。

如果妳已經使用navController請發表您的viewDidLoad和Tab 1

+0

在那裏,我重新寫了這個問題。希望能幫助到你。 – 2010-12-07 14:16:39

0

正如@Amandir指出,您可能可以通過使用UINavigationController來解決您的問題。我有一種感覺,你試圖濫用模態視圖控制器的概念,這就是爲什麼它不能像你期望的那樣工作。當您使用presentModalViewController:animated:時,意圖應該是您顯示的是模態視圖,即用戶必須在她可以繼續之前交互和解除模態視圖。

上面的段落意味着當你展示一個模式視圖控制器時,不應該是可以使用標籤欄。既然你在使用push這個詞,我猜你想要改變Tab01的視圖,同時仍然可以使用標籤欄的功能。問題是除了UINavigationController之外,沒有任何內置的推視圖控制器的方法。 persentModalViewController:animated:只應用於需要模式視圖的情況,這在iPhone上意味着全屏視圖。

最簡單的方法可能是使用UINavigationController並隱藏導航欄。然後你會得到我認爲你在追求的功能。另一種選擇是手動添加和刪除子視圖。

[self.view addSubview:repVC.view]; 

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

您可以使用塊的動畫,如果你想要一些奇特的轉變。

相關問題