KeyWindow添加了subView,没有在前面显示

时间:2017-04-25 08:42:42

标签: ios objective-c uiview uiwindow keywindow

我使用keyWindow添加一个subView,它添加成功但没有显示在屏幕层次结构的前面。

深灰色视图是我添加的视图:

enter image description here

我的代码是:

@interface ViewController ()
{
    LMLUpspringView *pop_v;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    pop_v = [[LMLUpspringView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];

    UIWindow *keywindow = [[[UIApplication sharedApplication] delegate] window];

    [keywindow addSubview:pop_v];

    //[keywindow bringSubviewToFront:pop_v];
    //[self.view addSubview:pop_v];

}

我已尝试使用[keywindow bringSubviewToFront:pop_v]将其带到前面。但是不行。

如果我使用[self.view addSubview:pop_v],它会显示在前面。

3 个答案:

答案 0 :(得分:1)

您遇到此问题,原因是您不知道viewDidLoad方法与viewDidAppear:方法之间的区别。

  

<强> viewWillAppear中:

     

在将视图添加到窗口的视图层次结构

之前调用      

<强> viewDidAppear:

     

将视图添加到视图层次结构

后调用

控制器的视图添加到窗口的视图层次结构位于viewWillAppear:viewDidAppear:之间,viewDidLoad位于viewWillAppear:之前,所以你不能这样做。你应该在viewDidAppear:添加你的观点。

答案 1 :(得分:0)

您可以使用appdelegate的Windows解决此问题:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:pop_v]

答案 2 :(得分:0)

使用此:

@interface ViewController ()
{
    LMLUpspringView *pop_v;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    pop_v = [[LMLUpspringView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
  

UIWindow * keywindow = [[UIApplication sharedApplication] keyWindow];

    [keywindow addSubview:pop_v];

    //[keywindow bringSubviewToFront:pop_v];
    //[self.view addSubview:pop_v];

}