如何在 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];
【问题讨论】:
设置它的rootViewController
和makeKeyAndVisible
;在您的应用程序中(在完成-完成-启动之后!)如果您没有像这样使用UIWindow
,这显然意味着您不需要需要使用UIWindow
来执行实际任务。
【参考方案1】:
如果你使用UINavigationController
使用:
[self.navigationController.view.window addSubview:aView];
如果你使用UITabBarController
使用:
[self.tabBarController.view.window addSubview:aView];
在AppDelegate
中,您可以直接将视图分配给窗口。在appDelegate
didFinishLaunchingWithOptions
方法中使用:
[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 中添加视图?的主要内容,如果未能解决你的问题,请参考以下文章