2016-03-08 62 views
1

我正在开发通用应用程序,我想为iPad和iPhone加载不同的文件。在iOS中加载不同的UINavigationController:导航流不工作

导航流程不起作用。任何帮助赞赏。

我写像应用程序代理下面的代码,

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导航VC和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

更新

选择-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; 

选择-2

删除故事板故事板屏幕上,并创建progrmatically导航控制器,就像在故事板,而不是UIViewController的标识UINavigation控制器

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

集标识符,因为你是从加载导航控制器故事板不是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,如果您编程创建导航控制器,它会在导航堆栈中添加另一个堆栈,检查更新问题一次,并更新您的答案请 –

+0

ok anbu,当您添加屏幕快照时,我更新了我的答案。检查它 – Saood

+0

@ Anbu.Karthik在我的文章阅读评论。这将解决您的问题 – Saood

1

我觉得我的代码将帮助您

appdelegate.h

@property (strong , nonatomic)UINavigationController *mainNavController; 

添加此行didFinishLaunchingWithOptions添加此行appdelegate.m方法

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;