2011-02-13 11 views
13

से पॉप आउट होने पर इसे वापस लाएं, मैं निम्नलिखित करने का प्रयास कर रहा हूं।नेविगेशन स्टैक में धक्का दिए जाने पर टैबबार को छुपाएं और नेविगेशन स्टैक

मेरे पास 2 टैब के साथ एक टैब बार नियंत्रक है। दोनों टैब उनमें से प्रत्येक पर एक टेबल व्यू के साथ नेविगेशन नियंत्रक हैं।

अब जब मैं पहले टैब में तालिका का एक सेल चुनता हूं, तो मैं एक और टैब बार नियंत्रक दबा रहा हूं, इसलिए मैं पैरेंट टैबबार नियंत्रक के टैब बार को छिपाना चाहता हूं, और जब मैं नेविगेशन पर बैक बटन क्लिक करता हूं बार मैं फिर से पैरेंट टैब बार देखना चाहता हूं, क्योंकि मैं अपने मूल टैब बार दृश्य में हूं।

मैंने hidesbottombarwhenpushed की कोशिश की और यह पैरेंट टैब बार नियंत्रक टैब बार छुपाता है लेकिन जब मैं वापस क्लिक करता हूं तो यह इसे वापस नहीं लाता है।

उत्तर

38

ठीक है, तो आखिरकार मुझे अपना जवाब मिल गया, यही वह है जो मुझे लगता है।

self.hidesBottomBarWhenPushed = YES; 
[self.navigationController pushViewController:aViewController animated:YES]; 
self.hidesBottomBarWhenPushed=NO; 

तो मूल रूप से hidesBottomBarWhenPushed = हाँ, और फिर अपने दृश्य नियंत्रक धक्का और फिर hidesBottomBarWhenPushed = नहीं; यह एक आकर्षण की तरह काम करता है।

eddy और अपने पद के लिए धन्यवाद here

+0

मुझे एक ही समस्या का सामना करना पड़ रहा था, धन्यवाद आदमी! – Mateus

+0

यह काम करता है, लेकिन जब मैं नेविगेशन बार बैक बटन पर क्लिक करता हूं। यह फिर से दिखाई देता है। मैं चाहता हूं कि यह केवल प्रथमदृश्य पर दिखाई दे। –

1

ऐप्पल दस्तावेज़ों के अनुसार, आप एक नेविगेशन नियंत्रक पर UITabBarController उदाहरण को धक्का नहीं दे सकते। और इसके लिए एक अच्छा कारण है: यदि आपने टैब बार में कोई अन्य आइटम चुना है तो आप धक्का टैब बार नियंत्रक से वापस कैसे आते हैं?

सरल उत्तर यह है: ऐसा न करें, यह आपके उपयोगकर्ता को भ्रमित करेगा। आप किसी अन्य व्यू कंट्रोलर के लिए पहले व्यू कंट्रोलर को स्वैप करने का प्रयास कर सकते हैं जो एक टैब बार कंट्रोलर हो सकता है, लेकिन उसके लिए पुश पैराडिग का उपयोग न करें: इसके बजाय एक स्पष्ट बटन का उपयोग करें जो आपके पहले टैब बार कंट्रोलर को दूसरे के लिए स्वैप करेगा, अधिमानतः उपयोग कर रहा है एक दृश्य संक्रमण।

आप UIView वर्ग के लिए setAnimationTransition:forView:cache: प्रलेखन देख सकते हैं पता करने के लिए किसी अन्य के लिए स्वैप करने के लिए कैसे, कहते हैं, एक टैब बार नियंत्रक:

  1. एक एनीमेशन ब्लॉक शुरू करो।
  2. कंटेनर दृश्य पर संक्रमण सेट करें।
  3. कंटेनर व्यू से सबव्यू हटाएं।
  4. कंटेनर दृश्य में नया सबव्यू जोड़ें।
  5. एनीमेशन ब्लॉक को कम करें।

इस मामले में, कंटेनर दृश्य एप्लिकेशन की विंडो होगी।

+0

का उपयोग करते हैं मैं नेविगेशन नियंत्रक पर एक UITabBarController धक्का कर रहा हूँ, हम कहते हैं कि UITabBarController तीन tab है चलो, तो मैं यह मान लेगा कि पहले टैब में पैरेंट व्यू पर ले जाने के लिए बैक बटन होगा। यदि उपयोगकर्ता किसी अन्य टैब पर है तो मैं समझता हूं कि वह मूल दृश्य पर वापस नहीं आ सकता है, और मुझे लगता है कि मैं इसके साथ ठीक हूं। तो मैं जानना चाहता हूं कि मुझे यह कैसे करना चाहिए – Yogesh

1

आप भी इसे गुण निरीक्षक का उपयोग कर छिपा कर सकते हैं जब चयन tabBar नियंत्रक

enter image description here

5

स्वीकार किए जाते हैं जवाब मेरे लिए एक समस्या थी।

मेरे ऐप में तीन UIViewController की गहराई के साथ एक नेविगेशन था।

  • FirsViewController शो UITabBar है।(सही)
  • FirsViewController SecondViewController को धक्का देता है, और SecondViewController UITabBar नहीं दिखाता है। (सही)
  • द्वितीय दृश्य नियंत्रक ने थर्ड व्यू कंट्रोलर को धक्का दिया, और थर्ड व्यू कंट्रोलर शो UITabBar है। (गलत)
  • थर्ड व्यू कंट्रोलर सेकंडव्यू कंट्रोलर पर पॉप किया गया, और दूसरा दृश्य नियंत्रक शो UITabBar है। (गलत)
  • द्वितीय दृश्य नियंत्रक FirstViewController पर पॉप किया गया, और FirstViewController शो UITabBar है। (सही)

समाधान मुझे UINavigationControllerDelegate के प्रतिनिधि की स्थापना की गई थी के लिए

तेज:

self.navigationController?.delegate = self 

ऑब्जेक्टिव-सी:

self.navigationController.delegate = self; 

और उसके बाद निम्न प्रतिनिधि विधि को लागू

स्विफ्ट:

fun navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 

    if fromVC.isKindOfClass(FirstViewController) && toVC.isKindOfClass(SecondViewController) { 

     self.hidesBottomBarWhenPushed = true; 

    } 
    else if fromVC.isKindOfClass(SecondViewController) && toVC.isKindOfClass(FirstViewController) { 

     self.hidesBottomBarWhenPushed = false; 

    } 

    return nil 

} 

ऑब्जेक्टिव-सी:

-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController 
           animationControllerForOperation:(UINavigationControllerOperation)operation 
               fromViewController:(UIViewController*)fromVC 
               toViewController:(UIViewController*)toVC 
{ 

    if ([fromVC isKindOfClass:[FirstViewController class]] && [fromVC isKindOfClass:[SecondViewController class]]) { 

     self.hidesBottomBarWhenPushed = true; 

    } 
    else if ([fromVC isKindOfClass:[SecondViewController class]] && [fromVC isKindOfClass:[FirstViewController class]]) { 

     self.hidesBottomBarWhenPushed = false; 

    } 

    return nil; 

} 

आशा है कि यह मदद की।

0

अपने FirstViewController उपयोग में

self.hidesBottomBarWhenPushed = true 

अपने SecondViewController में

override func willMoveToParentViewController(parent: UIViewController?) { 
     if parent == nil { 
      var viewControllers = self.navigationController!.viewControllers 
      if ((viewControllers[viewControllers.count - 2]).isKindOfClass(FirstViewController.self)) { 
       (viewControllers[viewControllers.count - 2] as! FirstViewController).hidesBottomBarWhenPushed = false 
      } 
     } 
    }