6

मुझे आश्चर्य है कि आईफोन प्रोग्रामिंग में AppDelegate = [[UIApplication sharedApplication] delegate] से NavController कैसे प्राप्त करें। उदाहरण के लिए, अन्य दृश्य नियंत्रक में जहां हम AppDelegate का संदर्भ देते हैं।AppDelegate से navController कैसे प्राप्त करें।

applicationDelegate.h में हमने:

UINavigationController *navController; 

और

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview: navController.view]; 
    [window makeKeyAndVisible]; 
} 

applicationDelegate.m में पीछा कर रहा है वहाँ वैसे भी MainWindow से navController पाने के लिए:

UIWindow *mainWindow = [appDelegate window]; 
+1

आप नेविगेशन नियंत्रक को अपने ऐप प्रतिनिधि की संपत्ति क्यों नहीं बनाते? –

+0

मुझे केवल मुख्यविंडो (UIWindow * mainWindow = [appDelegate window]) द्वारा navController के बारे में जानकारी प्राप्त करने की आवश्यकता है, यह संभव है। – ramo

+0

मुझे लगता है कि नहीं। लेकिन आप वास्तव में ऐप प्रतिनिधि का उपयोग क्यों नहीं कर सकते? –

उत्तर

17

यह अन्य UIViewController UINavigationController में निहित है, तो आप बस फोन कर सकते हैं:

UINavigationController *navController = self.navigationController; 

UIViewController से।

अन्यथा, आप AppDelegate में एक संपत्ति के रूप में UINavigationController सेट कर सकते हैं।

// AppDelegate.h 
@property (nonatomic, strong) UINavigationController *navController; 

फिर appDelegate.navController तक पहुंचें।

या, आप खिड़की के rootViewController के रूप में UINavigationController सेट कर सकते हैं:

[window setRootViewController:navController]; 

और फोन कहीं से भी: आपके आवेदन इस मैक्रो परिभाषा का उपयोग करने में लगभग कहीं भी

UINavigationController *navController = window.rootViewController; 
+0

बहुत निर्देशक! धन्यवाद! हालांकि एक सवाल: यदि आप 'विंडो' के माध्यम से navController तक पहुंचने जा रहे हैं, तो क्या आपको यूआईएप्लिकेशन के माध्यम से पहुंच प्राप्त नहीं करनी है? क्या शायद एक छोटा रास्ता है? – JohnK

+0

आप 'विंडो' संपत्ति के साथ किसी भी UIView से विंडो पर जा सकते हैं। – Lucien

1

आप अपने प्रतिनिधि वर्ग की संपत्ति के रूप में navController बना सकते हैं। नमूना नीचे:

applicationDelegate.h में

@property (retain, nonatomic) UINavigationController *navController; 

applicationDelegate.m में

@synthesize navController; 

तो आप (अन्य वर्गों में navController मिल आपका प्रतिनिधि वर्ग मान लें के लिए निम्न कोड का उपयोग कर सकते MyApplicationDelegate है):

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate]; 
UINavigationController *navController = appDeleagte.navController 
2

आप navCo बना सकते हैं ntroller एक संपत्ति

@property (nonatomic,strong) UINavigationController *navController; 

तो बस अपने AppDelegate से उस तक पहुंच

appDelegate.Controller 
-1

आप beginer और शिक्षार्थी, नेविगेशन नियंत्रक पूरे आवेदन जो सिर्फ़ अपने ऐप्लिकेशन के "ढेर" तैयार करेंगे में साझा किया जाता है कर रहे हैं viewcontrollers, ताकि आप ऐप के माध्यम से किसी भी व्यू कंट्रोलर (केवल उस नियंत्रक को धक्का दिया गया हो) में नेविगेशन नियंत्रक तक पहुंच सकें। जब आप किसी भी नियंत्रक को दबाते हैं तो यह नेविगेशन नियंत्रक के "ढेर" में जोड़ा जाएगा।

आप उस व्यू कंट्रोलर के स्वयं ऑब्जेक्ट के साथ नेविगेशन नियंत्रक तक पहुंच सकते हैं।

[self.navigationController pushViewController:detail animated:YES]; 

लिंक के माध्यम से जाएं नेविगेशन शरीर रचना का पूरा ज्ञान देगा।

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

1

कोई अतिरिक्त गुण की जरूरत है, उपलब्ध:

#define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController) 

जब आप अपने ऊपर मैक्रो डालते हैं आर स्रोत या एक। हेडर फ़ाइल में जो आप अपने स्रोत में आयात करते हैं, तो आप mainNavController का उपयोग शुरू कर सकते हैं जैसे कि यह एक स्थानीय चर था।

उदाहरण के लिए:

[mainNavController pushViewController:myViewController animated:YES]; 

या मैक्रो के बिना, कोड में सीधे:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
appDelegate.navController; // do something with the navController 

आप लगभग कहीं भी इस कोड का उपयोग कर सकते हैं, जो उपयोगी है अगर आप एक वर्ग के अंदर काम कर रहे हैं और आप सीधे ViewController तक नहीं पहुंच सकते हैं।