2011-01-31 12 views
6

मेरे पास 2 UINavigationControllers के साथ UITabBarController सेटअप है।UITabBarControllers टैब पर डबल क्लिकिंग नेविगेशन नियंत्रक की रूट पर जाता है

एक UINavigationController में एक UIViewController है, अन्य UINavigationController में दो UIViewControllers हैं। यदि आप फिर दूसरे UIViewController पर नेविगेट करते हैं और पहले से चुने गए टैब पर क्लिक करते हैं तो यह आपको UINavigationController की रूट पर लाता है (यह पहला UIViewController होगा)।

क्या ऐसा होने से रोकने का कोई तरीका है? मैं नहीं चाहता कि उपयोगकर्ता नेविगेशन नियंत्रक की जड़ पर जाने के लिए पहले से चयनित टैब पर क्लिक करने में सक्षम होना चाहें।

उत्तर

17

ऐसा करने के लिए आपको टैबबार प्रतिनिधि कॉल लेने के लिए अपने ऐप प्रतिनिधि में एक फ़ंक्शन को लागू करने की आवश्यकता है।

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

इस रूप में कहा जाता है:

अपने अनुप्रयोग delegate.m फ़ाइल में didfinishlaunching विधि में, इस लाइन

[tabBarController setDelegate:self]; 

तो इस विधि को लागू (आपके ऐप्स का भी प्रतिनिधि में) जोड़ने टैब प्रतिनिधि प्रोटोकॉल का हिस्सा और एक टैब के चयन को रोक देगा यदि यह पहले से ही चयनित है।

आशा है कि मदद करता है।

+0

यह काम करता है, मेरे TabBarController को छोड़कर अन्य व्यू कंट्रोलर का हिस्सा था। तो ऐप प्रतिनिधि के भीतर प्रतिनिधि को स्थापित करने के बजाय मैंने इसे उचित व्यू कंट्रोलर के भीतर सेट किया। धन्यवाद! – Mausimo

+1

इसे ऐप प्रतिनिधि में डालने के बजाय, मैंने TabBarViewController को उपclassed और subclass प्रतिनिधि को self.delegate = self के रूप में सेट किया। फिर स्टोरीबोर्ड में मैं अपने tabbarviewcontroller के लिए उप-वर्ग चुनता हूं। – nearpoint