切换到另一个选项卡时,在选项卡中保留新视图

时间:2010-12-07 12:28:01

标签: iphone cocoa-touch uiview uitabbarcontroller

情况就是这样:

我有一个带有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的视图。

希望编辑有助于理解。

3 个答案:

答案 0 :(得分:1)

嗯,

我仍然建议使用Navigationcontroller。会使事情变得更容易,符合苹果的指导方针和建议,并且实施得非常快。 (只需创建一个Navigationcontroller,将Tab1的视图作为主视图并将其交给TabbarController。然后对于mailView使用[self.navigationController pushViewController:mail animated:YES];然后navcontroller为您保存当前视图当你切换标签时)

但是如果出于某些原因你必须使用modalViewcontroller,你可以在显示ModalView时停用标签栏,或者尝试在ViewWillAppear中实现一个开关或一个简单的if ... else情况,你在哪里查看加载。 然后清理窗口并加载右侧屏幕。

希望你明白我的意思,有时候我的写作方式似乎让人迷惑。 ^^

答案 1 :(得分:0)

更多信息会很棒。

你是如何设置TabbarController的?

你如何推新视图?在UINavigationController中?如果没有,那么用navController做,他应该保存实际的视图状态,你的问题应该解决。

如果您已经使用了navController,请发布View 1的Viewcontroller的ViewDidLoad和ViewWillAppear

答案 2 :(得分: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];

如果你想要一些花哨的过渡,你可以使用块动画。