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

Имам добавен подизглед при повторно стартиране на приложението, в приложението се извика 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)приложение:(UIApplication *)приложение 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