2011-01-10 10 views
7

नहीं कहा मैं एक UISplitViewController एक UITabBarController अंदर उपयोग कर रहा हूँ एक सादे UIViewController विभाजित दृश्य के मालिक फलक में और विस्तार फलक, जो अपने आप में एक वेनिला UIViewController शामिल में एक UINavigationController साथ।UISplitViewController प्रतिनिधि तरीकों

मुझे पता है कि ऐप्पल केवल रूट स्तर पर विभाजित दृश्यों का उपयोग करने की सलाह देता है, हालांकि मैंने अन्य अनुप्रयोगों (उदाहरण के लिए, अमेज़ॅन- 'इच्छा सूची' टैब) देखा है जो टैब में विभाजित दृश्यों का उपयोग करते हैं, इसलिए मुझे यकीन है कि यह संभव है ।

मेरी समस्या यह है कि विभाजन दृश्य के प्रतिनिधि तरीके, यानी। UISplitViewControllerDelegate में उनको कॉल नहीं किया गया है, जो पोर्ट्रेट मोड में स्विच करते समय मुझे अपने पॉप-ओवर मेनू बनाने से रोकता है।

प्रश्न में तरीकों का पालन कर रहे हैं -

// Called when a button should be added to a toolbar for a hidden view controller 
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc; 

// Called when the view is shown again in the split view, invalidating the button and popover controller 
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem; 

// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers. 
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController; 

UISplitViewControllerकरता रोटेशन सूचनाएँ प्राप्त।

मैं

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight]; 

हालांकि, willHideViewController नहीं करता है का उपयोग करते हुए अगर मैं परिदृश्य सही (या बाएं) एप्लिकेशन लॉन्च की शुरुआत में करने के लिए स्थिति पट्टी उन्मुखीकरण मजबूर मिल willShowViewController विधि के नाम से जाना जा सकता है, बुलाया नहीं है। और मैं ऐप को परिदृश्य में शुरू करने के लिए मजबूर नहीं करना चाहता हूं। अगर मैं वही काम करता हूं लेकिन इसे पोर्ट्रेट पर मजबूर करता हूं, तो मुझे कॉलबैक नहीं मिलते हैं।

मुझे समझ में नहीं आता कि विभाजन दृश्य नियंत्रक अपने प्रतिनिधि तरीकों को क्यों नहीं बुला रहा है जब यह अन्यथा सही ढंग से व्यवहार कर रहा है। इन विधियों

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

आंतरिक रूप से अपने method- से बुलाया जाना चाहिए, और जब मैं यह अंदर ब्रेकपाइंट, मैं जांच कर सकते हैं कि प्रतिनिधि सेट कर दिया जाता है और यह अभी भी जीवित है कि।

इस दिन पर अटक गया! बाकी सब कुछ बढ़िया काम कर रहा है और मुझे बहुत खुशी है कि स्प्लिटव्यू/टैबबार/नेविबार संयोजन अच्छी तरह से काम कर रहा है। मुझे बस इन अधिसूचनाओं की आवश्यकता है।

क्या मुझे घुमाए जाने पर शायद उन्हें मैन्युअल रूप से कॉल करना चाहिए? जब 'UISplitViewController' ऐसा करना चाहिए तो बहुत गलत लगता है।

उत्तर

4

हल, यह या तो रूट स्तर या टैबबार का प्रत्यक्ष सबव्यू होना चाहिए जो रूट स्तर पर भी होना चाहिए। कष्टप्रद!

+0

हैलो, क्या आप अपने समाधान को थोड़ा और विस्तारित करना चाहते हैं? मुझे अभी भी एक ही समस्या है। मुझे 1 टैबकंट्रोलर मिला है जिसमें 3 टैब में एक स्प्लिटव्यू है। मैंने प्रत्येक स्प्लिटव्यू में अपने स्वयं के उपखंडित नेविगेशन नियंत्रक को विस्तार दृश्य जोड़ा जो स्प्लिटव्यू का प्रतिनिधित्व करता है। यह वर्तमान में दृश्यमान टैब के लिए निर्दोष काम कर रहा है लेकिन दूसरों के लिए नहीं। तो जब मैं अपना दृश्य घुमाता हूं और टैब को बदलता हूं तो यह सब गड़बड़ हो जाता है, जब तक कि मैं इसे घुमाता हूं। फिर, केवल दृश्य दृश्य के लिए। –

+0

हम्म क्षमा करें मुझे यकीन नहीं है .. मुझे यकीन है कि मैंने यहां कहीं भी एक पोस्ट देखी है जो इंगित करता है कि स्प्लिटव्यू टैब और घुमावदार समस्याओं के बीच बदलना, और यह कि स्प्लिविविवे हमेशा विंडो स्तर पर होना चाहिए- यहां तक ​​कि एक के तहत भी नहीं टैब नियंत्रक। जो मुझे लगता है कि दस्तावेज़ों का समर्थन किया जाता है। मैं वास्तव में स्क्रैच से अपना खुद का स्प्लिट व्यू बनाने का मार्ग ले रहा हूं क्योंकि मुझे क्षैतिज विभाजन की आवश्यकता है – Sam

+1

स्क्रैच से प्रयास करने के बजाय, इसे आजमाएं - http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad – Viraj

3

सबसे पहले, यह देखने का प्रयास करें कि आप सही प्रतिनिधि सेट कर रहे हैं या नहीं। उदाहरण के लिए, मान लीजिए कि आपने तीन नियंत्रकों,

UISplitViewController* splitView; 
UIViewController* masterView; 
UIViewController* detailView; 

बनाया आप विवरण दृश्य में प्रतिनिधि प्रोटोकॉल लागू किया ताकि जब उन्मुखीकरण परिवर्तन, विवरण दृश्य उपकरण पट्टी में एक बटन रखने के लिए सक्षम होना चाहिए।

अब विभाजन के लिए प्रतिनिधि को इस समारोह को कॉल करने के लिए, आपको प्रतिनिधि को स्वयं सेट करने की आवश्यकता है।

तो कहीं, यदि आप निम्नलिखित कॉल याद कर रहे हैं,

splitView.delegate = detailView; 

detailView के उन्मुखीकरण परिवर्तन आदि की सूचना पाने के कभी नहीं होगा कम से कम यही मेरी सही जगह फंस गया था।

दूसरा विकल्प नीचे दिए गए लिंक को देखना है। इसमें एक पूरी तरह से काम करने वाला कोड भी है, हालांकि इसे थोड़ा सा समीक्षा करने के बाद, यह चीजों को काम करने के लिए आपको जो कुछ चाहिए, उससे थोड़ा अधिक हो सकता है, लेकिन फिर हे .. यह एक कोड है जो पहले से ही काम कर रहा है, इसलिए आपको तेजी से जाना चाहिए ।

http://www.noorselijster19.com/2011/03/ios/combine-tabbar-and-splitview/

2

मैं विस्तार UIViewController के लिए मास्टर UIViewController से एक संदेश भेजने के लिए निम्न विधि की तरह। कहीं न कहीं मास्टर कार्यान्वयन के अंदर:

id detailViewController = [[self.splitViewController viewControllers] lastObject]; 
[detailViewController setSomeProperty:…]; 

यह पॉल Hegarty के 2011 पतन स्टैनफोर्ड ItunesU iPad और iPhone अनुप्रयोग विकास पाठ्यक्रम से है।

+0

के साथ संघर्ष कर रहा हूं, मुझे आपके विचार को बहुत पसंद है क्योंकि यह बॉक्स के बाहर एक विचार है । –

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