2011-10-04 20 views
15

मुझे कुछ ऐसा परेशानी हो रही है जो मैंने सोचा था कि यह आसान हो सकता है। मेरे रूट व्यू कंट्रोलर में एक टेबल है, जब एक पंक्ति का चयन किया जाता है, तो मैं एक नया दृश्य दबाता हूं और वहां से मैं एक और टैब पर जाता हूं।जब टैब का चयन किया जाता है तो रूट दृश्य पर पॉप

मेरा प्रश्न यह है कि मैं कैसे सुनिश्चित करूं कि जैसे ही उपयोगकर्ता पहले टैब को टैप करता है, नेविगेशन नियंत्रक रूट पर पॉप हो जाएगा?

उत्तर

3
[self.navigationController popToRootViewControllerAnimated:NO]; 
+0

नहीं वास्तव में मुझे मदद की एनिमेटेड बदल रहा है। जब मैंने एनिमेटेड को YES पर सेट किया था, तो मेरा टैब बार और न ही नेविगेशन नियंत्रक में कोई अन्य बटन काम नहीं कर रहा था। – Glogo

3

जो आप करने की कोशिश कर रहे हैं वह थोड़ा अजीब लगता है। क्या आपने UINavigationControllers और UITabBarControllers के संयोजन पर मानव इंटरफ़ेस दिशानिर्देश पढ़े हैं?

हालांकि, आपको अपने यूआईटीएबीबार नियंत्रक के लिए एक प्रतिनिधि सेट करके टैब के चयन का पता लगाने और टैबबारकंट्रोलर को लागू करने के द्वारा टैब का चयन पता लगाना है: didSelectViewController: प्रतिनिधि विधि। इस विधि में आपको UINavigationController के popToRootViewController का उपयोग करके रूट व्यू कंट्रोलर पर वापस पॉप करने की आवश्यकता है: विधि।

+0

यदि आप ऐप्पल के फोन की जांच करते हैं। पसंदीदा और हालिया टैब का व्यवहार वही है जो ओपी चाहता है। –

+0

जब आप तालिका पंक्ति का चयन करते हैं तो फोन ऐप टैब स्विच नहीं करता है - यह वह व्यवहार था जिसे मैं पूछताछ कर रहा था, जब उपयोगकर्ता एक अलग टैब टैप करता है तो रूट पर पॉप नहीं होता है। –

+0

आह, हां ओपी का सवाल पूरी तरह से नहीं है ओपी का मतलब है "वहां से मैं एक और टैब पर जाता हूं"। क्या उपयोगकर्ता एक और टैब चुनता है या ऐप स्वचालित रूप से स्विच करता है। –

25

निम्नलिखित प्रतिनिधि को टैबबार पर चुना जाता है, जबकि निम्नलिखित प्रतिनिधि को कॉल किया जाता है।

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

इस प्रतिनिधि विधि के अंदर निम्नलिखित कोड डालें।

if ([viewController isKindOfClass:[UINavigationController class]]) 
    { 
     [(UINavigationController *)viewController popToRootViewControllerAnimated:NO]; 
    } 

मेरे ऐप पर यह ठीक काम करता है।

+0

Thanx बहुत मेरे लिए काम किया। –

+0

हाँ वास्तव में यह मेरे आवेदन में काम कर रहा है धन्यवाद – Pradeep

+0

मेरे लिए वास्तव में बहुत उपयोगी है, मेरी आवश्यकता के अनुसार मेरे ऐप में ठीक काम कर रहा है। – ravinder521986

8

स्विफ्ट प्रेमियों के लिए:

import UIKit 

class YourTabBarControllerHere: UITabBarController, 
UITabBarControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self; 
    } 

    func tabBarController(tabBarController: UITabBarController, 
     didSelectViewController viewController: UIViewController) { 
      if let vc = viewController as? UINavigationController { 
       vc.popViewControllerAnimated(animated: false); 
      } 
    } 
} 

संपादित करें: स्विफ्ट 3 अद्यतन, उनका कहना है कि बाहर के लिए @Justin Oroz के लिए धन्यवाद।

+0

ओपी के सवाल के रूप में रूट नियंत्रक के लिए पूछा गया है, यह होना चाहिए (स्विफ्ट 3 वाक्यविन्यास में) 'vc.popToRootViewController (एनिमेटेड: झूठा)' –

0

सबसे पहले, आप UITabBarController के उपवर्ग बना सकते हैं और जोड़ना चाहिए ऑब्जर्वर:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tabBar addObserver:self forKeyPath:@"selectedItem" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil]; 
} 

जब tabbar चुना जाता है, हम विधि में कार्रवाई करेंगे:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 
    if ([keyPath isEqualToString:@"selectedItem"] && [object isKindOfClass:[UITabBar class]]){ 
     UITabBar *bar = (UITabBar *)object; // The object will be the bar we're observing. 
     // The change dictionary will contain the previous tabBarItem for the "old" key. 
     UITabBarItem *wasItem = [change objectForKey:NSKeyValueChangeOldKey]; 
     NSUInteger was = [bar.items indexOfObject:wasItem]; 
     // The same is true for the new tabBarItem but it will be under the "new" key. 
     UITabBarItem *isItem = [change objectForKey:NSKeyValueChangeNewKey]; 
     NSUInteger is = [bar.items indexOfObject:isItem]; 
     if (is == was) { 
      UIViewController *vc = self.viewControllers[is]; 
      if ([vc isKindOfClass:[UINavigationController class]]) { 
       [(UINavigationController *)vc popToRootViewControllerAnimated:YES]; 
      } 
     } 
    } 
} 
0

UTabController एक बताने के लिए एक अलग UX पता चलता है उपयोगकर्ता "रूट पर पॉप"। एक टैब पर वापस स्विच करते समय, यह पहले से पूर्ण यूआईएनएवी ढेर रखता है। यदि वे बार आइटम को दूसरी बार टैप करते हैं (चयनित टैब टैप करते हैं), तो तभी यह रूट पर पॉप हो जाता है। यह सब स्वचालित है। Instagram जैसे कुछ ऐप्स, तीसरे टैप को शीर्ष पर स्क्रॉल करने की अनुमति देते हैं।

मैं डिफ़ॉल्ट रूप से चिपकने का सुझाव देता हूं क्योंकि उपयोगकर्ता यही उम्मीद कर रहे हैं।

0

नीचे तेजी से 3 में मेरे लिए काम किया था .इस कोड:

1> उपवर्ग UITabBarController और एक इवर साथ विधि के नीचे दो को लागू:
class MyTabBarController: UITabBarController ,UITabBarControllerDelegate { var previousSelectedTabIndex : Int = -1 }

2> viewDidLoad

में tabbar प्रतिनिधि सेट
override func viewDidLoad() {  
    super.viewDidLoad() 
    self.delegate = self // you must do it} 

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 

    self.previousSelectedTabIndex = tabBarController.selectedIndex 
}  
func tabBarController(_ tabBarController: UITabBarController, 
           shouldSelect viewController: UIViewController) -> Bool {  

    if self.previousSelectedTabIndex == tabBarController.selectedIndex { 
     let nav = viewController as! UINavigationController // mine in nav_VC 
     for vc in nav.childViewControllers { 
      if vc is YUOR_DESIRED_VIEW_CONTROLLER { 
      nav.popToViewController(vc, animated: true) 
      return false// IT WONT LET YOU GO TO delegate METHOD 
      } 
     } 
    } 
return true 
}  

tabBarController.selectedIndex आपके द्वारा चयनित टैब दे

टैबबारकंट्रोलर_शोल्ड चयन करेंदृश्य नियंत्रक विधि आप कुछ वांछित गणना के साथ अपना वांछित दृश्य नियंत्रक सेट कर सकते हैं।
तुम दोनों उपरोक्त विधि के साथ ऊपर कोड खेलने नहीं मिल रहा है और आप को पता है कि कैसे दोनों एक साथ

2

काम कर स्विफ्ट 3.1 में

आ अगर आपके TabBar कक्षा के लिए UITabBarControllerDelegate जोड़ें:

वर्ग YourClass : UITabBarController, UITabBarControllerDelegate {

के बाद:

ओवरराइड समारोह tabBar (tabBar: UITabBar, didSelectItem आइटम: UITabBarItem) {

let yourView = self.viewControllers![self.selectedIndex] as! UINavigationController 
yourView .popToRootViewControllerAnimated(false) 

}

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

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