情况就是这样:
我有一个带有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的视图。
希望编辑有助于理解。
答案 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];
如果你想要一些花哨的过渡,你可以使用块动画。