使此视图显示在应用程序内的每个视图中

时间:2013-06-18 09:38:53

标签: ios objective-c cocoa-touch

enter image description here

这是从我的导航栏垂下的“窗帘”。

如何将此视图作为我应用中所有视图的叠加层? 我必须能够将图像添加到此叠加层的子视图

4 个答案:

答案 0 :(得分:1)

只需将其添加到应用程序的关键窗口即可。这将覆盖一切。

[[[UIApplication sharedApplication] keyWindow] addSubview:curtainView];

我使用此方法来呈现全屏幕进度指示符叠加(实际上是单例),以在某些活动期间阻止UI,无论上下文如何。


请注意,UIWindow没有界面方向,它始终与设备对齐,因此如果采用这种方式旋转UI是必须处理的(这实际上表明这不是最好的设计)。 / p>

答案 1 :(得分:1)

我认为获得所需效果的最佳方法是create your own custom container view controller。这将允许您将其他视图控制器作为自定义视图控制器的子项托管,因此即使其下方的内容发生更改,您也可以始终在屏幕上显示一个“窗帘”。

与其他解决方案相比,自定义视图控制器的一些优点是:

  • 干净的设计:应用中的其他任何视图或视图控制器都不用担心窗帘
  • 单个实例:在视图控制器转换期间,窗帘将保持原位
  • DRY:似乎很适合“不要重复自己”的概念

答案 2 :(得分:0)

您可以通过以下步骤实现所需 -

1。)为例如UINavigationController创建扩展名。 UINavigationControllerWithCurtain

2。)如果您使用xib或initWithCoder构建导航,请覆盖initWithRootController,并在navigationcontroller's视图中添加自定义视图,即self.view本身在构造函数中。

3.。)您需要覆盖pushViewController方法才能在最顶层设置自定义窗帘视图,因此请添加以下内容 -

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[super viewController:viewController animated:animated];
[self.view bringSubviewToFront:customCurtainView];
}

答案 3 :(得分:-2)

  1. 创建自定义UIView(我们称之为curtainView)。
  2. 在您计划用于视图的任何init方法中initWithCoder:如果从XIB或StoryBoard加载它们,请输入用于创建“窗帘”子视图的代码。
  3. 在此自定义curtainView课程中,添加用于引用窗帘子视图的属性。
  4. 制作UIView的所有UIViewController s(非curtainView s)子类。
  5. 瞧!