2016-03-08 71 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;