2011-09-17 16 views
6

वर्तमान में, मैं निम्नलिखित कोड के माध्यम से प्रोग्राम के रूप में 'didSelectViewController' विधि को गति प्रदान करने की कोशिश कर रहा हूँ:विधि को कैसे ट्रिगर करें "tabBarController: didSelectViewController:" प्रोग्रामेटिक रूप से?

self.tabController.selectedViewController 
     = [self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]; 

हालांकि, 'didSelectViewController' विधि आमंत्रित नहीं किया गया। मैं टैब बार मैन्युअल रूप से चुनने के बिना विधि को कैसे ट्रिगर कर सकता हूं?

+1

N.B. तरह tabbar प्रतिनिधि विधि कॉल कर सकते हैं 'tabBarController का व्यवहार: didSelectViewController:' आईओएस 3 के साथ बदल गया। 3 से पहले के संस्करणों में, इस विधि को चयनित दृश्य नियंत्रक दोनों प्रोग्रामेटिक और उपयोगकर्ता द्वारा शुरू किए गए परिवर्तनों के लिए बुलाया गया था। आईओएस 3 और उसके बाद में, इसे टैब बार में उपयोगकर्ता नल के जवाब में ही बुलाया जाता है और जब आपका कोड टैब बार सामग्री को प्रोग्रामेटिक रूप से बदलता है तो उसे कॉल नहीं किया जाता है। – albertamg

+0

मुझे आश्चर्य है कि आप इसे क्यों प्राप्त करना चाहते हैं। – Raptor

उत्तर

16
self.tabController.selectedIndex = NEWSTAB_INDEX; // to actually switch to the controller (your code would work as well) - not sure if this does or not send the didSelectViewController: message to the delegate 
[self.tabController.delegate tabBarController:self.tabController didSelectViewController:[self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]]; // send didSelectViewController to the tabBarController delegate 
+0

यह काम किया। मैंने परीक्षण किया! – user523234

+0

हाँ, यह मेरे लिए भी काम करता है। लेकिन आपको ऐसा क्यों करना है? मेरे मामले में, UITabbarControllerDelegate एक अलग वर्ग, NSObject है, और प्रतिनिधि विधियों को लागू करता है। समस्या यह है कि यदि मैं टैब प्रोग्रामैटिकल स्विच करता हूं, तो प्रतिनिधि विधियों को नहीं कहा जाता है। यदि आप स्वयं टैब पर क्लिक करके स्विच करते हैं, तो यह काम करता है। अभी तक यह पता नहीं लगा सका कि ऐसा क्यों होता है। – Zsolt

+0

@Zsolt इस प्रकार प्रतिनिधि को ऐप्पल (उपयोगकर्ता इंटरैक्शन पर ट्रिगर) के बारे में सोचा गया था, और यह एक तरह से समझ में आता है। प्रोग्रामेटिक रूप से बदलते समय, आप पहले ही जानते हैं कि यह बदल गया है, इसलिए कुछ स्थितियों में प्रतिनिधि को ट्रिगर करने में कोई बात नहीं हो सकती है। –

0

तेज 3.0 के लिए आप प्रोग्राम इस

self.tabController.selectedIndex = index (e.g. 0,1...etc) 
self.tabController.delegate.tabBarController(self.tabController, didSelectViewController: self.tabController.viewControllers[index]) 
संबंधित मुद्दे