2013-08-22 5 views
9

से स्टोरीबोर्ड-परिभाषित UINavigationController प्राप्त करें स्टोरीबोर्ड में, मेरे पास एक प्रारंभिक दृश्य नियंत्रक है जो एक UINavigationController के लिए fades।AppDelegate

 | |  | | 
    -> | | -> | |  
     | |  | | 
    ViewCtrl NavCtrl 

मैं अनुप्रयोग प्रतिनिधि से नेविगेशन नियंत्रक के लिए एक संदर्भ पाने के लिए (@Guillaume उत्तर की तरह this question में करता है) चाहते हैं।

यहाँ कैसे मैं इसे का उपयोग करने की कोशिश कर रहा हूँ है:

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

लेकिन नेविगेशन नियंत्रक नहीं के बराबर है।

कोई भी धारणा क्यों NavController शून्य है या मैं इसके संदर्भ में क्या कर सकता हूं?

+0

क्या आपने अपने UINavigationController के लिए स्टोरीबोर्ड आईडी सेट की है? यदि नहीं, तो आपको अपने स्टोरीबोर्ड में ऐसा करना चाहिए। इसके बाद, आपको अपने नेविगेशन नियंत्रक तक पहुंचने के लिए उन सभी की आवश्यकता नहीं है। आपको बस [self.storyboard instantiateViewControllerWithIdentifier: @ "myID"] की आवश्यकता होगी। मैं आपके कॉलिंग को आपके व्यू कंट्रोलर से मान रहा हूं। आपके जैसे नेविगेशन नियंत्रक तक पहुंचने के लिए, यह केवल तभी संभव होगा जब आपका रूट व्यू कंट्रोलर UINavigationController के भीतर था। – rocir

+0

धन्यवाद @rocir! यह आशाजनक लग रहा है। मेरा एकमात्र आपत्ति यह है कि पहले से ही एक UINavigationController होना चाहिए, और मैं उस पर एक संदर्भ प्राप्त करना चाहता हूं। मुझे नहीं लगता कि मैं एक दूसरे नौसेना नियंत्रक को तुरंत चालू करना चाहता हूं। – bbrame

+0

लेकिन इस तरह से आप ऐसा कर रहे हैं, आप इसे नहीं बनाएंगे क्योंकि आपका रूट व्यू कंट्रोलर UINavigationController के भीतर नहीं है। इसके अलावा, इस बिंदु पर, UIViewController अभी तक तत्काल नहीं था। तो क्या आपके पास इन दो दृश्य नियंत्रकों को जोड़ने वाला कोई सेग्यू है? – rocir

उत्तर

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

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

आप नेविगेशन नियंत्रक की विशेषताओं निरीक्षक में अपने नेविगेशन नियंत्रक के लिए नियंत्रक पहचानकर्ता निर्दिष्ट करें।

+0

यह "पहचान निरीक्षक" (बाईं ओर से 3) में है। – Ali

+2

यह हर बार –

+0

@MohamedElkassas बिल्कुल नेविगेशन नियंत्रक का एक नया उदाहरण लौटाएगा। स्टोरीबोर्ड से कोई भी नियंत्रक प्राप्त करना हर बार नई वस्तु को "तत्काल" कर रहा है। स्टोरीबोर्ड से "साझा उदाहरण" जैसी कोई चीज़ नहीं है। यदि आप इस तरह के साझा उदाहरण चाहते हैं, तो आपको इसे एक बार एपडिलेगेट पर तुरंत चालू करना चाहिए, और उसके बाद ऐपडेगेट के माध्यम से इसे अपने ऐप में हर जगह से एक्सेस करना चाहिए। –

2

तो आर्सेन का समाधान अच्छा लग रहा है लेकिन मुझे नहीं पता था कि मेरी स्टोरीबोर्ड लॉल का नाम कैसे प्राप्त करें। क्या मेरे लिए काम किया

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 

AppDelegate पर navigationController के संदर्भ हो रही है बुरा कोडिंग अभ्यास की तरह लग सकता है था, लेकिन क्योंकि यह वह जगह है जहाँ

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

स्थित है मेरे मामले में मैं यह आवश्यक है, जो अधिसूचना प्राप्त होने पर बुलाए जाने वाले तरीकों में से एक। मैं भी कैसे नेविगेशन नियंत्रक अद्यतन करने के लिए एक बार मैं संदेश मिला है, तो हो सकता है विषय बंद पर संघर्ष करना पड़ा, लेकिन यहाँ एक नि: शुल्क टिप है:

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

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

[navigationController popToViewController:dashBoardViewController animated:YES]; 

आशा है कि यह मदद करता है!

संबंधित मुद्दे