Модальное представление не запускается из дочернего контроллера

Мой MainViewController модально загружает другое представление.

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *uiViewController = [storyboard instantiateViewControllerWithIdentifier:@"splashViewController"];
    [uiViewController setModalPresentationStyle:UIModalPresentationCustom];
    [uiViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:uiViewController animated:YES completion:nil];
}

Когда я загружаю MainViewController непосредственно из AppDelegate, загружается модальное представление.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIViewController *rootController = [[RootViewController alloc] init];
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [navigationController setNavigationBarHidden:true];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
    return YES;
}

Если я загружаю MainViewController в качестве дочернего контроллера другого контроллера, модальное представление не загружается.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.drawerViewController.leftViewController = self.leftDrawerViewController;
    self.drawerViewController.centerViewController = self.mainViewController;
    self.drawerViewController.animator = self.drawerAnimator;

    UIViewController *rootController = self.drawerViewController;
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [navigationController setNavigationBarHidden:true];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
    return YES;
}

Основной вид по-прежнему загружается. Вот только модальное представление не создается.

Что вызывает проблему и как я могу решить эту проблему?


person Sandah Aung    schedule 20.07.2015    source источник


Ответы (1)


Вы не должны представлять другой контроллер представления из метода viewDidLoad,

к тому времени текущее представление НЕ завершено с изменениями иерархии представлений,

Вы можете представить новый контроллер представления после вызова viewDidAppear, поэтому вы можете переместить этот код в viewDidAppear.

person ogres    schedule 20.07.2015
comment
Похоже, что сейчас он работает, но другая часть, похоже, выходит из строя. - person Sandah Aung; 20.07.2015
comment
просто убедитесь, что вы не представляете несколько контроллеров представления одновременно или не представляете и не отклоняете их одновременно. - person ogres; 20.07.2015