模态视图控制器隐藏选项卡栏

时间:2013-01-24 04:08:30

标签: iphone ios objective-c uitabbarcontroller modalviewcontroller

在我的基于选项卡的应用程序中,单击其中一个选项卡时,我想显示一个带有一些信息的模态视图控制器。 在我的app delegate的didSelectViewController方法中,我正在添加模态视图。但它占据整个屏幕并隐藏标签栏。我不想隐藏标签栏,只想显示弹出的模态视图,可以将其解除。

我该怎么做?

请帮忙。

提前致谢。

5 个答案:

答案 0 :(得分:4)

模态视图控制器始终在iPhone上全屏显示。如果你不想隐藏标签栏,那么你需要以模态之外的其他方式呈现这个视图。

答案 1 :(得分:4)

通过将modalPresentationStyle设置为.currentContext,我能够“呈现”一个新的视图控制器, over 另一个 UNDER 标签栏

let newViewController = UIViewController()
newViewController.view.backgroundColor = UIColor.red
newViewController.modalPresentationStyle = .currentContext
newViewController.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
present(newViewController, animated: true, completion: nil)

编辑:从更多测试中,如果有人在显示newViewController时更改了标签,则上述操作可能会出现一些错误行为。

要“修复”,我创建了一个“切换器” - 一个UIViewController,它在我想要在标签栏下翻转的视图控制器之间激活:

view.addSubview(nextView)
UIView.transition(from: currentView,
   to: nextView,
   duration: 0.5,
   options: animation,
   completion: { (_) in
      currentView.removeFromSuperview()
   })

在这种情况下,currentView是ViewControllerOne(当前可见的)的视图,nextView是ViewControllerTwo(我们想要呈现的那个)的视图。

答案 2 :(得分:2)

例如,如果secondViewController是第二个tabbar的第二个viewController,你应该这样做:

[secondViewController.view addSubview:theViewYouWantToShow];

答案 3 :(得分:1)

在iOS中,Modal View Controller在所有可用的视图控制器中始终具有最高优先级。所以你不能在你的情况下使用模态视图控制器。

如果您只想在屏幕上显示具有背景可见性的弹出窗口,那么只需使用 UIAlertView 即可。您可以根据需要添加“确定”或“取消”按钮以删除警报视图。

或者

如果要显示带标签栏可见性的完整视图,请将该选项卡中的视图添加为子视图。你可以使用视图的转换属性给它一个弹出的感觉。

答案 4 :(得分:1)

您可以通过设置PresentationStyle以模态方式呈现它。此样式在一个正方形中呈现viewController并且它不占据全屏。

self.modalPresentationStyle = UIModalPresentationFormSheet;

您还可以设置转场:

self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;