如何在 UIWindow 中添加视图?

Posted

技术标签:

【中文标题】如何在 UIWindow 中添加视图?【英文标题】:How to add view in UIWindow? 【发布时间】:2015-03-20 06:17:15 【问题描述】:

我想在UIWindow 中添加一个视图,代码如下:

 AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
 UIWindow *window = delegate.window;
 UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
 aView.backgroundColor = [UIColor blackColor];
 [window addSubview:aView];

此代码无效。我想克隆 UIAlertView 的属性。当我们调用时,它会出现在所有内容之上 [alertViewInstance show]; 方法。

也试过了:

   UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    UIWindow* window = [UIApplication sharedApplication].keyWindow;

    if (!window) 
        window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    

    [window addSubview:aView];
    [window bringSubviewToFront:aView];

【问题讨论】:

设置它的rootViewControllermakeKeyAndVisible;在您的应用程序中(在完成-完成-启动之后!)如果您没有像这样使用UIWindow,这显然意味着您不需要需要使用UIWindow 来执行实际任务。 【参考方案1】:

如果你使用UINavigationController 使用:

[self.navigationController.view.window addSubview:aView];

如果你使用UITabBarController 使用:

[self.tabBarController.view.window addSubview:aView];

AppDelegate 中,您可以直接将视图分配给窗口。在appDelegatedidFinishLaunchingWithOptions方法中使用:

[self.window addSubview:aView];

希望对你有帮助...

【讨论】:

【参考方案2】:

试试这个代码:

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIWindow* window = [UIApplication sharedApplication].keyWindow;
    if (!window) 
        window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    

    UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    aView.backgroundColor = [UIColor redColor];
    aView.center = window.center;
    [window insertSubview:aView aboveSubview:self.view];
    [window bringSubviewToFront:aView];

【讨论】:

嗯?它会起作用的。我使用此代码来自定义(假)popoverView 或 alertView。您可以在下面添加此代码:[window bringSubviewToFront:aView]; 我的故事板:i.cubeupload.com/fnceNh.png如果不设置rootviewcontroller,aView将不会显示 当我添加这个视图时,它添加成功!!但是我的导航栏稍微隐藏在这个视图后面。有什么建议吗?? @天乐【参考方案3】:

试试这个代码:

window = [[UIApplication sharedApplication].windows lastObject];

替换以下代码:

window = [[UIApplication sharedApplication].windows objectAtIndex:0];

【讨论】:

【参考方案4】:

您的窗口需要有一个根视图控制器。

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

UIWindow *window = delegate.window;
UIViewController *controller = [[UIViewController alloc] init]; 
window.rootViewController = controller;
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
aView.backgroundColor = [UIColor blackColor];
[controller.view addSubview:aView];

【讨论】:

这似乎有效,但新视图覆盖了整个屏幕。它的框架是 (0,0) (320,568) 是的 viewcontroller.view 覆盖了整个屏幕。 aView 是您想​​要的视图,大小为 100, 100 我想做的是让它看起来像 alertView。透明背景。但它会与调用此代码的 viewController viewController 重叠。 当我添加这个视图时,它添加成功!!但是我的导航栏稍微隐藏在这个视图后面。有什么建议吗?? @NikosM。【参考方案5】:

您可以使用以下方式添加视图

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

【讨论】:

【参考方案6】:

你可以试试下面的代码...添加子视图到窗口

UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
aView.backgroundColor = [UIColor blackColor];
[[UIApplication sharedApplication].keyWindow addSubview:aView];

//删除

[aView removeFromSuperview];

希望对你有所帮助..!

【讨论】:

当我添加这个视图时,它添加成功!!但是我的导航栏稍微隐藏在这个视图后面。有什么建议吗?? @vidhyanand【参考方案7】:

我认为你错过了这个。检查一次。

[self.window makeKeyAndVisible];

【讨论】:

就是这样......只要你有这个,其他方法就可以工作【参考方案8】:

UIAlertView 创建另一个 UIWindow 并在调用 show 方法时将此窗口设置为关键窗口。因此,如果您想显示自己的警报视图,请创建一个 UIWindow 实例显示它并将您的自定义警报视图添加到这个新创建的窗口。

【讨论】:

以上是关于如何在 UIWindow 中添加视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在通常的 iOS 应用程序(基于 UIWindow)中使用 GPU 加速的 SkCanvas?

在 iOS 8.3 中向 UIWindow 添加子视图

如何在导航栏顶部添加视图

如何在所有视图的顶部添加UIView

如何在导航栏顶部添加视图

向添加到 UIWindow 的视图添加约束时,为啥无法设置自动布局约束?