2015-11-22 68 views
0

,如果我不喜歡這個什麼self.view.widow之間的差異,[[UIApplication的sharedApplication] keyWindow]在Objective-C

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"test" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil]; 
    [alert show]; 
} 

// Called when a button is clicked. The red view and alert will be automatically dismissed after this call returns 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    [self showView]; 
} 

// after animation ,this will work fine 
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
// [self showView]; 
} 

- (void)showView { 
    // Called when a button is clicked. The view will be automatically dismissed after this call returns 
    UIView *view = [[UIView alloc] init]; 
    view.frame = CGRectMake(0, 0, 200, 200); 
    view.backgroundColor = [UIColor redColor]; 
    view.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2.0f, [UIScreen mainScreen].bounds.size.height/2.0f); 
    // [self.view.window addSubview:view]; //when i use this ,both of the two delegate methods works fine 
    UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
    [window addSubview:view]; 
} 

然後紅色視圖和警報會後alertView:clickedButtonAtIndex:調用返回自動解除

enter image description here

誰可以告訴我原因嗎?

什麼和[UIApplication的sharedApplication] keyWindow]在Objective-C

回答

0

你的問題基本上是在此解決self.view.widow之間的區別:

diffrence between [[[[UIApplication sharedApplication] delegate] window] and [[UIApplication sharedApplication].keyWindow?

爲了配合回你的問題,UIAlertView會出現在系統窗口中,而這個窗口就是顯示警報時的keyWindow。當警報解除時,該窗口消失,因此視圖消失的原因。

假設self.view是應用程序窗口的子視圖(幾乎總是這種情況),您的視圖將繼續顯示,因爲窗口本身在警報解除後繼續顯示。

+0

最後一段不太正確。 'self.view.window'是視圖添加到的任何窗口。它可能是主要的應用程序窗口。它可能是應用程序創建和使用的輔助窗口。它可能是一個系統窗口。很可能它是應用程序的主窗口,但它不一定是。 – rmaddy

+0

OP應該澄清,但我認爲在這個特定的例子中使用self.view意味着該視圖是一個視圖控制器的視圖,它被自動添加到應用程序的窗口。我澄清了我的答案。 – Jose

相關問題