【问题标题】:Keep new view in a tab when switching to another tab切换到另一个选项卡时在一个选项卡中保留新视图
【发布时间】:2011-05-21 13:35:05
【问题描述】:

情况是这样的:

我有一个带有 2 个标签的标签栏。 Tab01 和 Tab02。 在 Tab01 中,我有一个推动 repVC 的按钮:

repVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [自我presentModalViewController:repVC动画:是]; [(UIViewController *)[tabController.viewControllers objectAtIndex:0] setView:repVC.view]; [repVC 发布];

在 repVC 中,我有另一个按钮可以推动 MFMailComposerViewController

MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init]; [自我presentModalViewController:邮件动画:是]; 【邮件发布】;

问题是:当显示mailView时(在Tab01中),我点击Tab02,然后回到Tab01,mailView被隐藏,即使我再次点击电子邮件按钮,视图也不会出现。

所以我有的是:

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

对于repVC,我在推送视图时使用此行,这样即使我切换选项卡,该视图仍然会被激活:

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

但我不能对 ma​​il 做同样的事情,因为 tabController 是在另一个我无法导入的类中声明的。所以我无法访问 tabController 并为 Tab01 设置视图。

希望编辑有助于理解。

【问题讨论】:

    标签: iphone cocoa-touch uiview uitabbarcontroller


    【解决方案1】:

    嗯,

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

    但是,如果由于某种原因您必须使用 modalViewcontroller,您可以在显示 ModalView 时停用标签栏,或者尝试在 ViewWillAppear 中实现开关或简单的 if...else case,您可以在其中检查要显示的屏幕加载。 然后清理窗口并加载正确的屏幕。

    希望你明白我的意思,有时我的写作方式似乎让人们感到困惑。 ^^

    【讨论】:

    • 工作就像一个魅力。我在 Tab01 中创建了一个 NavigationController,并且只在我必须推送新视图时使用它。效果很好,因为没有一个视图实际上显示 NavigationBar,而新视图隐藏了 TabBar。谢谢!
    • 哦,顺便说一句,我用[navController presentModalViewController:repVC animated:YES];代替pushViewController
    • 很高兴能帮到你:-)
    【解决方案2】:

    多一点信息会很好。

    你是如何设置你的 TabbarController 的?

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

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

    【讨论】:

    • 那里,我重新写了这个问题。希望对您有所帮助。
    【解决方案3】:

    正如@Amandir 指出的那样,您可能可以通过使用UINavigationController 来解决您的问题。我感觉您正在尝试滥用模态视图控制器的概念,这就是为什么它不能按预期工作的原因。当您使用 presentModalViewController:animated: 时,意图应该是您正在显示一个模态视图,即用户必须交互并关闭模态视图,然后她才能继续。

    上面的段落意味着当你展示一个模态视图控制器时,它不应该可以使用标签栏。由于您使用的是 push 这个词,我猜您希望更改 Tab01 的视图,同时仍然能够使用标签栏的功能。问题是除了UINavigationController 之外,没有任何内置的推送视图控制器的方法。 persentModalViewController:animated: 只应在您想要模式视图的情况下使用,在 iPhone 上意味着全屏视图。

    最简单的方法可能是使用UINavigationController 并隐藏导航栏。然后你会得到我认为你追求的功能。另一种选择是手动添加和删除子视图。

    [self.view addSubview:repVC.view];
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多