2016-03-26 3 views
0

У меня есть UINavigationController в моей раскадровке и два viewControllers, которые выполняют следующие функции:Set RootViewController внутри класса UINavigationController

InitialViewController: это будет домашний экран приложения.

FirstTimeViewController: это экран, который появляется, когда пользователь открывает приложение в первый раз.

Мои UINavigationController имеет класс, которые имеют следующий код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if ([[ReadPlist initWithPlist:@"Configuration.plist" key:@"initialConfiguration"] boolValue]){ 

     FirstTimeViewController *firstTimeController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"firstTimeView"]; //or the homeController 
     [self.navigationController pushViewController:firstTimeController animated:NO]; 

    }else{ 

    InitialViewController *initialController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"initialView"]; //or the homeController 
     [self.navigationController pushViewController:initialController animated:NO]; 

    } 

} 

В основном это код проверки .plist файл, если конкретное поле активно, если ДА означает, что приложение работает для первого время, в этом случае он вызывает соответствующий viewController.

Но этот код не работает, и я вижу NavigationController с черным видом. Все, что я хотел бы сделать, это то же самое, что мы делаем в построителе интерфейса, просто перетаскиваем строку из UINavigationController внутри UIViewController и устанавливаем как «Root View Controller», но в моем случае я пытаюсь сделать это программно.

Как я могу это сделать?

+0

В текущей реализации вы pushViewController, что причина для кнопки возврата видна. Лучше установить навигацию rootViewController –

ответ

0

Когда вы нажимаете на FirstTimeViewController Set Bool (Пользовательское значение по умолчанию) в контроллере ViewDidload или в вашем коде успеха. Затем после установки в AppDelegate ниже кода.

если (значение Bool = Да)

{

FirstTimeViewController * FS = [[UIStoryboard storyboardWithName: @ "Main" пачке: ноль] instantiateViewControllerWithIdentifier: @ "FirstTimeViewController"]; UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: FS]; [navController setNavigationBarHidden: YES]; self.window.rootViewController = navController; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; }

0

Мой ответ

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)options 
{ 
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
    FirstTimeViewController *firstTimeVC = [navController.storyboard instantiateViewControllerWithIdentifier:@" FirstTimeViewController"]; 
    InitialViewController *initialVC = [navController.storyboard instantiateViewControllerWithIdentifier:@" InitialViewController"]; 
    if ([[ReadPlist initWithPlist:@"Configuration.plist" key:@"initialConfiguration"] boolValue]) 
    { 
     // FirstTime 
     navController.viewControllers = [NSArray arrayWithObject:firstTimeVC]; 
    } 
    else 
    { 
     // Initial 
     navController.viewControllers = [NSArray arrayWithObject:initialVC]; 
    } 
    [self.window makeKeyAndVisible]; 
    return YES; 
}