добавленное подпредставление не будет отображаться после перезапуска приложения

У меня добавлено подпредставление при перезапуске приложения, при вызове приложенияDidBecomeActive вызывается, но не отображается, в чем может быть причина?

- (UIView *)mySubView {
    if (_mySubView == nil) {
       _mySubView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
       _mySubView.opaque = NO;
       _mySubView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
       _mySubView.exclusiveTouch = YES;
       [_mySubView setUserInteractionEnabled:NO];
    }

    return _mySubView;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    [window addSubview:[self mySubView]];
}

Что еще интересно, это будет показано, если я оставлю приложение запущенным, выключу устройство, а затем снова включу его. Но если я закрою приложение, а затем перезапущу его, я не смогу увидеть подвид.


person tom    schedule 24.12.2011    source источник
comment
Я все еще вижу то же поведение после того, как попробовал решения, предоставленные Ecarrion и Hardic, не понимаю, почему это такое странное поведение при перезапуске, перейдите к другому сценарию.   -  person tom    schedule 26.12.2011


Ответы (2)


Пожалуйста, добавьте следующую строку, подобную этой,

- (void)applicationDidBecomeActive:(UIApplication *)application     
{

   UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];

   [window addSubview:[self mySubView]];

   [window makeKeyAndVisible];

 }

а также изменить цвет [UIColor blueColor];

Вы обязательно увидите эффект

Наслаждаться!

person Hardik Shah    schedule 24.12.2011
comment
Кажется, это не помогает, я все еще вижу то же поведение. Может ли это быть как-то покрыто контроллерами представления, которые были загружены после вызова addSubview? Если да, то есть ли детерминированный способ преодолеть эту ситуацию? - person tom; 24.12.2011

ЕСЛИ вы находитесь в своем делегате приложения и у вас есть свойство окна, как и должно быть, вы можете просто сделать это:

[[self window] addSubview:[self mySubView]];

Для установки свойства окна сделайте следующее:

В вашем AppDelegate.h

@property (strong, nonatomic) UIWindow *window;

В вашем AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

.
.
.
//Create your main controller
.
.
.

[self.window setRootViewController:mainController];
[self.window makeKeyAndVisible];
person Ecarrion    schedule 24.12.2011
comment
У меня нет свойства окна в моем делегате приложения. Как я могу получить/установить его? В противном случае произошел сбой при обращении к свойству окна. - person tom; 24.12.2011