2016-03-08 2 views
1

Я работаю над универсальным приложением, я хотел бы загрузить различные файлы для iPad и iPhone.Загрузка различных UINavigationController в iOS: поток навигации не работает

Навигационный поток не работает. Любая помощь оценивается.

Я пишу код, как ниже в приложении делегата,

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *viewController; 

UINavigationController *navViewController; 




if (IDIOM == IPAD) { 
    navViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
} else { 
    navViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
} 

// self.window.rootViewController = viewController; 
self.window.rootViewController = navViewController; 
[self.window makeKeyAndVisible]; 
return YES; 

enter image description here

+0

, как вы можете использовать тот же идентификатор ViewController_iPad для navigationVC и ViewController – techloverr

+0

теперь я изменился, но не работает –

+0

так что ваша topViewController видна? или вы получаете черный экран? – techloverr

ответ

1

Эй братан попробовать этот раз,

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

UINavigationController *navigationController = (UINavigationController *) self.window.rootViewController; 

if (IDIOM == IPAD) { 
    [navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"] animated:NO]; 
} else { 
    [navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"ViewController"] animated:NO]; 
} 

self.window.rootViewController = navigationController; 
[self.window makeKeyAndVisible]; 
return YES; 
+0

Спасибо, он отлично работает. –

1

вы добавили, как это, например

здесь вы получите идентификатор UINavigation контроллер не UIViewcontroller, поэтому попробуйте

if (IDIOM == IPAD) { 
navViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
} else { 
navViewController = [storyboard instantiateViewControllerWithIdentifier:@"XXXX"]; 
} 

enter image description here

Обновлено

Choice-1

вы можете получить прямой доступ в соответствии с вашим способом просто изменить это никакой потребности UINavigationController *navViewController; здесь

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *viewController; 

if (IDIOM == IPAD) { 
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
} else { 
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
} 

    self.window.rootViewController = viewController; 
// self.window.rootViewController = navViewController; 
[self.window makeKeyAndVisible]; 
return YES; 

Choice-2

удалить раскадровку на экране видеоряда и создать контроллер навигации на progrmatically, как

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *viewController; 

if (IDIOM == IPAD) { 
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
} else { 
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
} 

    UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:viewController]; 
// self.window.rootViewController = viewController; 
self.window.rootViewController = navigationController; 
[self.window makeKeyAndVisible]; 
return YES; 
+0

Да, я делаю то же самое, что и выше –

+0

canyou показать раскадровку сцены –

+0

я редактировал и добавил проверки screenshot.please –

1

идентификатора набора контроллера UINavigation в раскадровке вместо UIViewController Identifier, потому что вы загружаете навигации контроллер от эталонная панель не viewcontroller.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *viewController; 

    UINavigationController *navViewController; 

    if (IDIOM == IPAD) 
    { 
     navViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
    } 
else 
    { 
     navViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
    } 

self.window.rootViewController = navViewController; 
[self.window makeKeyAndVisible]; 
return YES; 
+0

no saood, если вы создадите контроллер навигации progrmatically, он добавит еще один стек в стек навигации, проверьте вопрос об обновлении один раз и обновите свой ответ, пожалуйста, –

+0

ok anbu, когда вы добавили снимок экрана, я обновил свой ответ. проверьте это – Saood

+0

@ Anbu.Karthik читает комментарии в моем посте. это решит вашу проблему – Saood

1

Я думаю, что мой код поможет вам

добавить эту строку в appdelegate.h

@property (strong , nonatomic)UINavigationController *mainNavController; 

добавить эту строку в appdelegate.m в didFinishLaunchingWithOptions метод

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 


    if (IDIOM == IPAD) 
    { 
     self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController_iPad"]; 
    } 
else 
    { 
     self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; 
    } 
    self.mainNavController = (UINavigationController *)self.window.rootViewController;