2013-08-22 14 views
9

'dan storyboard tanımlı UINavigationController'ı edinin Storyboard'da, bir UINavigationController'a dönüşen bir giriş görünümü denetleyicisine sahibim.AppDelegate

 | |  | | 
    -> | | -> | |  
     | |  | | 
    ViewCtrl NavCtrl 
I (@Guillaume cevap this question yaptığı gibi) uygulama temsilcinize dan navigasyon denetleyicisi için bir referans almak istiyorum

.

UIApplication.sharedApplication.delegate.window.rootViewController.navigationController; 

Ama navigasyon kontrolörü nil: Burada

bunu erişmeye çalışıyorum nasıl.

navController nil veya niçin referans almak için ne yapabilirim?

+0

UINavigationController ürününüz için Storyboard Kimliği ayarladınız mı? Eğer değilse, bunu Storyboard'unda yapmalısınız. Bundan sonra, navigasyon kontrol cihazınıza erişmek için bunlara ihtiyacınız yok. Sadece [self.storyboard instantiateViewControllerWithIdentifier: @ "myID"] öğesine ihtiyacınız var. Bunu senin görüş kontrol cihazından aldığını farz ediyorum. İstediğiniz gibi bir navigasyon denetleyicisine erişmek için, bu sadece rootViewController bir UINavigationController içinde olsaydı mümkün olurdu. – rocir

+0

Teşekkürler @rocir! Bu umut verici görünüyor. Tek itirazım, zaten bir UINavigationController örneğinin olması gerektiği ve buna bir referans almak istiyorum. İkinci bir nav kontrolörü oluşturmak istediğimi sanmıyorum. – bbrame

+0

Ama bu şekilde yapıyorsunuz, çünkü rootViewController bir UINavigationController içinde olmadığından bunu yapmayacaksınız. Ayrıca, bu noktada, UIViewController henüz oluşturulmadı. Yani bu iki kontrolörün bağlanmasını istediğiniz bir şey var mı? – rocir

cevap

23
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                 bundle: nil]; 

UINavigationController *controller = (UINavigationController*)[mainStoryboard 
        instantiateViewControllerWithIdentifier: @"<Controller ID>"]; 

Gezinme denetleyicinizin denetleyici tanımlayıcısını, gezinme denetleyicisinin öznitelik denetçisinde belirtin.

+0

"Kimlik Müfettişi" nde (soldan 3.). – Ali

+2

bu, her seferinde –

+0

@MohamedElkassas'ın tam olarak yeni bir örneğini döndürecektir. Storyboard'dan herhangi bir kontrolör almak, her seferinde yeni nesneyi "başlatıyor". film şeridinden "paylaşılan örnek" diye bir şey yoktur. Böyle bir paylaşılan örnek istiyorsanız, uygulamayı bir kez appdelegate'de gerçekleştirmeli ve ardından appdelegate aracılığıyla uygulamanızın her yerinden erişmelisiniz. –

2

Bu yüzden Arsen'in çözümü güzel görünüyor, ancak benim storyboardumun adını nasıl alacağımı bilmiyordum. Ne benim için çalıştı kötü kodlama uygulamaları gibi gözükebilir AppDelegate üzerinde NavigationController en referansı alma

UINavigationController *navigationController = (UINavigationController*)_window.rootViewController; 
AVDashboardViewController *dashBoardViewController = 
(AVDashboardViewController*)[navigationController.viewControllers objectAtIndex:1];//since on index 0 I have my login screen and index 1 is the home screen 

, ama

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

bulunduğu yeri olduğu için de benim durumumda ben olan gerekli Bildirim alındığında yöntemlerden biri. Ben de mesajı alınca belki konu dışı, gezinti kontrol güncellemek için nasıl mücadele ama burada ücretsiz bir ipucu:

UIBarButtonItem *notiButton = [[UIBarButtonItem alloc] initWithTitle: @"Received push!" style: UIBarButtonItemStyleBordered target:self action:nil]; 

[[dashBoardViewController navigationItem] setLeftBarButtonItem:notiButton animated:YES]; 

[navigationController popToViewController:dashBoardViewController animated:YES]; 

yardımcı olur Umut!

İlgili konular