2014-04-09 7 views
7

मेरे पास UITabbarController में 3 टैब हैं, जिन्हें मैंने अपने Appdelegate में बनाया है।किसी विशेष UITabBar आइटम को अक्षम/सक्षम करने के लिए,

जब मैं ऐप खोलता हूं, तो मैंने चयनित टैबबार बनाया है यह तीसरा टैबबार इटिम है।

उपयोगकर्ता केवल सूचकांक 0, पर UITabBarItem चयन कर सकते हैं जब वह में लॉग ऑन है।

मैं TabBarItem_0 के लिए जा रहा है जब वह TabBarItem_2 पर है से उपयोगकर्ता को प्रतिबंधित करने के लिए हर बात की कोशिश की। लेकिन कुछ भी काम नहीं किया। मैंने

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 

} 

लेकिन यह वांछित काम नहीं कर रहा है। मैंने स्टैक ओवरफ्लो की जांच की और लगभग एक ही सवाल पाया, जहां मुझे यह प्रतिनिधि मिला। लेकिन यह वांछित के रूप में मेरे लिए काम नहीं कर रहा है। मैं googled, लेकिन stackoverflows लिंक के अलावा कोई समाधान नहीं मिला, जो इस समय मदद नहीं की थी।

उस अक्षम टैबबार आइटम के क्लिक पर, मुझे एक पॉप अप दिखाना होगा। मैं इसे कैसे कार्यान्वित कर सकता हूं?

+1

आपने उस विधि में किस कोड को रखा था, जो आपने प्राप्त किया है वह वास्तव में कुछ भी नहीं करता है और वास्तव में संकलित नहीं होगा। – Fogmeister

उत्तर

3

आप

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; 
{  
     if (tabBarController.selectedIndex == 0) { 
      if(isUserLoggedIn) 
       return YES; 
      else 
       return NO; 
     } 

     return YES; 
} 

अपने कोड

- (void)viewDidLoad { 
    ... 
    [self checkLogin]; 
    ... 
} 

- (void)checkLogin { 
    if (!loggedIn) { 
     [[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:NO]; 
    } else { 
     [[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:YES]; 
    } 
} 

- (void)tapLogin { 
    // Do the login action 
} 

- (void)processLoginResult { 
    // Process the result of the login action 
    // If the result is success, set 'loggedIn = YES' 
    // Otherwise, set 'loggedIn = NO' 
    ... 
    [self checkLogin]; 
    ... 
} 
+0

ठीक है, यह टैब बार को अक्षम करता है, लेकिन उस अक्षम टैबबार आइटम के क्लिक पर, मुझे पॉप अप दिखाना होगा। मैं इसे कैसे कार्यान्वित कर सकता हूं? – Jasmeet

14

कुछ इस तरह का प्रयास में ऐसा कर सकते हैं, अगर यह काम नहीं करता है,

इस जोड़े आप में बार बार बनाने के बाद ऐप प्रतिनिधि,

[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:FALSE]; 

एक बार आप आप स्टोरीबोर्ड के साथ यह करने के लिए चाहते हैं, तो इसे फिर से

[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:TRUE]; 
+0

वांछित के रूप में काम नहीं कर रहा है। मुझे समझाएं, उदाहरण के लिए मैं tabitem_3 पर हूं और मुझे tabitem_1 को अवरुद्ध करना है, तो यह प्रतिनिधि पहली बार इसे रोक नहीं देता है, अधिक से अधिक जब मैं इस टैबिटैम_1 को फिर से क्लिक करता हूं, तो डिलीगेट को – Jasmeet

+0

नहीं कहा जाता है, मैंने जवाब अपडेट किया, नया प्रयास करें aprroach – rustylepord

+0

इस पर भी एक नज़र डालें, http: //stackoverflow.com/questions/16786556/prevent-tabbar-from-changing-tab-at-specific-index-ios? rq = 1 – rustylepord

1

सक्षम में प्रवेश करें, बस गंतव्य दृश्य नियंत्रक दृश्य में TabBarItem चयनित और सक्रिय बॉक्स अचिह्नित करें।

5

यह है कि मैं क्या स्विफ्ट 2.1 में किया था:

self.tabBarController!.tabBar.items![0].enabled = false 
4

त्वरित हैक है कि मैं वर्तमान दृश्य के शीर्ष पर एक पॉपअप पेश करने के लिए जब एक टैब बार आइटम पर उपयोग किया करते थे।

अपने TabBarViewController क्लास में, UITabBarControllerDelegate लागू करें और self.delegate = self सेट करना याद रखें।

कि

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
    if viewController.title == "Unique_title" //set an unique title for the view controller in storyboard or the view controller class. 
    { 
     performSegueWithIdentifier("YourModalViewIdentifier", sender: nil) 
     return false 
    } else { 
     return true 
    } 
} 

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

उम्मीद है कि मदद करता है।

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