2011-03-15 14 views
7

मेरे पास एक दृश्य है जो एक दृश्य लोड करता है, जिसे मुख्य नेविगेशन नियंत्रक के दृश्य को धक्का देने की आवश्यकता होती है।क्या कोई बेहतर तरीका है? प्रतिनिधि -> प्रतिनिधि -> प्रतिनिधि

मैंने प्रत्येक दृश्य के लिए एक प्रतिनिधि सेट अप किया है, और मूल रूप से मुख्य कॉल नेविगेशन नियंत्रक को 'चेन' का बैक अप लेता है।

यह काम करता है, लेकिन अगर यह हासिल करने के लिए एक बेहतर (आसान?) तरीका है तो मैं उत्सुक हूं?

उत्तर

-1

कैसे आप अपने कार्यक्रम को सेट कर लेने पर निर्भर करता है, यदि आपके अनुप्रयोग प्रतिनिधि शामिल एक UINavigationController आप नेविगेशन नियंत्रक कहीं से भी एक्सेस कर सकते हैं:

[[[NSApp delegate] navigationController] pushViewController: myVC animated:YES]; 

लेकिन फिर, कि तभी काम करता है अपने अनुप्रयोग प्रतिनिधि एक होता है UINavigationController

+0

यूजीएच। इसलिए मैंने टाइपो तय कर दिए। मै मैक ओएस और आईओएस प्रोग्रामिंग के बीच अक्सर जाता हूं। –

7

आप NSNotificationCenter का उपयोग करके एक संदेश भेजने के लिए अपने नेविगेशन नियंत्रक का जवाब दे सकते हैं।

आपके विचार navigationController कॉल करने के लिए की जरूरत है कि में, आप की तरह कुछ लिखते थे:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DoWork" object:nil]; 

कहाँ @"DoWork" अद्वितीय (सबसे अधिक संभावना) संदेश प्राप्तकर्ता का नाम किसी अन्य वस्तु का जवाब देंगे है।

और अपने navigationController में आप एक पर्यवेक्षक को जोड़ने के लिए, कि अधिसूचना को पकड़ने के लिए तो जैसे सक्षम होने के लिए की आवश्यकता होगी:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doWork) name:@"DoWork" object:nil]; 

कहाँ @selector(doWork) है चयनकर्ता आप जब सूचना पोस्ट किए जाने को करने के लिए चाहते हैं, और @"DoWork" वह अधिसूचना है जिसे आप जवाब देना चाहते हैं।

+0

यदि आपके पास नेविगेशन नियंत्रक नहीं है तो ऐसा करने का कोई तरीका है? मैंने अपने पहले वीसी में NotificiationnCenter जोड़ने की कोशिश की और फिर DoWork को किसी अन्य वीसी से कॉल करें, लेकिन यह ऐप को क्रैश करेगा (अपरिचित चयनकर्ता को भेजें ...)। तो मुझे लगता है कि आप यहां क्या वर्णन कर रहे हैं एक नेविगेशन नियंत्रक का उपयोग करने पर निर्भर करता है? –

+0

@ n.evermind: 'NSNotificationCenter' नेविगेशन नियंत्रक का उपयोग करने पर भरोसा नहीं करता है। शायद आपको एक नया SO प्रश्न बनाना चाहिए ताकि हम आपकी समस्या का समाधान कर सकें। – FreeAsInBeer

2

तो एक लोड देखें बी देखें। बाद में, बी लोड देखें सी देखें और बी के दृश्य से नेविगेशन नियंत्रक अपस्ट्रीम पर अपने व्यू कंट्रोलर को धक्का देना चाहता है? के रूप में देखें? नियंत्रक देखें।

बशर्ते व्यू बी में एक व्यू कंट्रोलर है जो नेविगेशन स्टैक का हिस्सा है, तो इसके व्यू कंट्रोलर नेविगेशन नियंत्रक को पकड़ सकते हैं, इससे कोई फर्क नहीं पड़ता कि यह [self navigationController] के माध्यम से कितना ढेर है।

दृश्यों में उनके नियंत्रक के लिए कोई सूचक नहीं है, लेकिन यदि आप पूरी तरह से एमवीसी तोड़ना चाहते हैं, तो आप नियंत्रक को स्वयं सेट कर सकते हैं। बेहतर तरीका होगा कि नियंत्रक को टैप एक्शन प्राप्त हो (या जो कुछ भी है जो लोड सी को लोड करने और धक्का दे रहा है) और फिर व्यू कंट्रोलर स्वैपिंग को संभाल लेता है। उदाहरण के लिए, यदि बी बी एक टेबल व्यू है, तो आप इसके व्यू कंट्रोलर को UITableViewDelegate के रूप में सेट करेंगे ताकि यह एक नया व्यू कंट्रोलर दबाकर एक पंक्ति का चयन संभाल सके।

आपका प्रश्न यह इंगित करता है कि आप दृश्य, इसके दृश्य नियंत्रक, एक नेविगेशन नियंत्रक, और नेविगेशन नियंत्रक के सामग्री क्षेत्र में प्रदर्शित होने वाले दृश्य के बीच अंतर नहीं कर रहे हैं। ये सभी ऑब्जेक्ट्स एक अलग रोले खेलते हैं, इसलिए यह आपके आवेदन को विकसित करने से पहले उनके और उनके पारस्परिक संबंधों पर अधिक बारीकी से देखने के लिए भुगतान करेगा।

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