2009-06-23 14 views
6

बस कुछ पता चला: यदि आपके पास एक नेविगेशन नियंत्रक (जिसमें इसके ढेर पर कुछ विचार हैं) के साथ एक टैबबार संयुक्त है और आप TabBarItem पर डबल क्लिक करते हैं, तो दृश्य पहले व्यू कंट्रोलर पर पॉप करता है, चाहे आपको पसंद है या नहीं।आईफोन यूआईटीएबरबार आइटम डबल-क्लिक पॉप नियंत्रक

क्या इसे रोकने का कोई तरीका है?

उत्तर

0

एकमात्र तरीका जो मैंने पाया है, वह UINavigationController का उप-वर्ग बनाना है और popToRootViewController को ओवरराइट करना शून्य वापस करने के लिए एनिमेटेड विधि है।

ऐसा लगता है कि यूआईटीएबीबार दो बार टैब्ड होने पर कॉल करता है। मैं अगर यह सही तरीका हालांकि ... इस मुद्दे पर कुछ प्रतिक्रिया प्यार करोगे नहीं जानता ...

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { 
    return nil; 
} 
1

मैं सिर्फ अपने आप को इस समस्या का सामना किया और यह करने के लिए एक रास्ता मिल गया। अपने UITabBarController के लिए एक प्रतिनिधि बनाने के लिए और tabBarController:shouldSelectViewController: लागू ही नियंत्रक का चयन को रोकने के लिए:

- (BOOL) tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    return tbc.selectedViewController != vc; 
} 

यदि आप केवल कुछ मामलों में यह रोकना चाहते हैं, आप भी और अधिक जटिल तर्क जोड़ सकते हैं।

5

आपको शायद इस व्यवहार को रोकना नहीं चाहिए। यह एक मानक आईफोन यूआई सम्मेलन है, जैसे स्क्रॉल व्यू के शीर्ष पर स्क्रॉल करने के लिए स्टेटस बार टैप करना।

यदि आप वास्तव में ऐसा करना चाहते हैं, तो आपको UITabBarController प्रतिनिधि विधि -tabBarController:shouldSelectViewController: लागू करना चाहिए, जैसा कि उल्लेख किया गया है। यदि आपके पास पांच से अधिक टैब हैं, तो selectedViewController एक दृश्य नियंत्रक हो सकता है जो "अधिक" खंड में है, लेकिन vc[UITabBarController moreNavigationController] होगा। (जैसे जब कोर डाटा का एक नेस्टेड श्रृंखला को संपादित करने की

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *selected = [tbc selectedViewController]; 
    if ([selected isEqual:vc]) { 
     return NO; 
    } 

    if ([vc isEqual:[tbc moreNavigationController]] && 
     [[tbc viewControllers] indexOfObject:selected] > 3) { 
     return NO; 
    } 

    return YES; 
} 
+1

मैं भी बहुत अच्छे कारणों से इस व्यवहार को रोकने की सलाह नहीं देता हूं। जब सिस्टम विस्तृत शॉर्टकट उपलब्ध नहीं होता है तो उपयोगकर्ता बंद हो जाते हैं। –

0

मैं के रूप में अभिप्रेत व्यवहार इस रखने के साथ सहमति व्यक्त करते हैं, लेकिन एक ही समय में बातें तनाव मुक्त कुलपति शान से ढेर के साथ दिलचस्प हो: यहाँ एक कार्यान्वयन है कि उस मामले संभालती है वस्तुओं)। मेरे मामले में, यह प्रत्येक वीसी को रद्द करने की ताकत है।

इस प्रकार, क्या मुझे यह जानने का कोई तरीका है कि हम रूट वीसी तक सभी तरह से पॉप-अप कर रहे हैं? मैं दृश्य के दौरान एक रद्द/रोलबैक सेशन सोच रहा हूं, विलुप्त होने वाला यह कटौती नहीं करता है, क्योंकि एक ही दृश्य निश्चित रूप से सहेजने के बाद भी गायब हो जाएगा। मुझे किसी भी तरह प्रसारित करने की ज़रूरत है "हम रद्द कर रहे हैं - जमानत!" जब किसी दिए गए टैब में रूट वीसी के लिए सभी तरह से पॉपिंग करते हैं। एक गंदे/नए ध्वज को सुरक्षा जांच के रूप में देखकर देखें WillDisappear भी मदद नहीं करता है, क्योंकि उस परीक्षण को कानूनी रद्द करने के मामले में दो बार बुलाया जाएगा (यानी, यदि रद्द बटन वास्तव में टैप किया गया है)।

+0

आह-हा। सबसे पहले मैंने सोचा कि श्रेणियां आपका मित्र हैं, और शायद मैं UIViewController पर एक रगड़ सकता हूं और popToRootViewController में हस्तक्षेप कर सकता हूं: सैनिकों को सतर्क करने के लिए। लेकिन इसके बदले उपclassing की आवश्यकता होगी, यह नहीं होगा। (जब भी संभव हो, कोको में उप-वर्गीकरण से बचने की कोशिश करता हूं, लेकिन यह संभवतः उन समयों में से एक नहीं हो सकता है।) यदि इसके आसपास एक कम एन्ट्रॉपी-लड़ा रास्ता है, तो मैं सभी कान हूं। –

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