2015-11-22 1 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

, который может показать мне причину?

чем разница между self.view.widow и [[UIApplication sharedApplication] keyWindow] в Objective-C

ответ

0

Ваш вопрос по существу адресованный здесь:

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

Для того, чтобы связать его обратно ваш вопрос, UIAlertView будет представлен в системном окне, и именно это окно является keyWindow, пока отображается ваше предупреждение. Когда предупреждение отключено, это окно исчезает, поэтому почему ваш взгляд исчезает.

Предполагая, что self.view является подвидным окном приложения (почти всегда в случае), ваше представление продолжает отображаться, потому что само окно продолжает отображаться после отклонения предупреждения.

+0

Последний абзац не совсем прав. 'self.view.window' - это любое окно, в которое было добавлено представление. Это может быть главное окно приложения. Это может быть вторичное окно, созданное и используемое приложением. Это может быть системное окно. Скорее всего, это главное окно приложения, но это необязательно. – rmaddy

+0

OP должен уточнить, но я предположил, что использование self.view в этом конкретном примере означает, что представление было представлением контроллера вида, которое было автоматически добавлено в окно приложения. Я уточнил свой ответ. – Jose