2017-04-25 68 views
0

我用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]帶給front.But不起作用。

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

回答

0

可以解決使用的appdelegate的Windows這樣的問題:

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

您遇到這樣的問題,是你造成的不知道viewDidLoad方法和viewDidAppear:方法之間的差異。

viewWillAppear中:

前視圖被添加到窗口視圖層次

viewDidAppear調用:

視圖後調用被添加到視圖層級

The控制器的視圖添加到窗口的視圖層次是viewWillAppear:viewDidAppear:之間,viewDidLoadviewWillAppear:之前,所以你不能這樣做。你應該在viewDidAppear:添加你的看法。

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]; 

}