2010-12-07 42 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]; 

您可以使用块的动画,如果你想要一些奇特的转变。

相关问题