2016-08-22 8 views
5

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

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

self.navigationController?.showViewController(vc, sender: self) 

Tabbar behind VC

// Inside ViewWillAppear Only reappear the tab bar if we successfully enter Discover VC (To prevent drag back half way causing tab bar to cause comment entry to be floating). This code check if we have successfully enters DiscoverVC 
    if let tc = transitionCoordinator() { 
     if tc.initiallyInteractive() == true { 
      tc.notifyWhenInteractionEndsUsingBlock({(context: UIViewControllerTransitionCoordinatorContext) -> Void in 
       if context.isCancelled() { 
        // do nothing! 
       } 
       else { 
        // not cancelled, do it 
        self.tabbarController.tabBar.hidden = false 
       } 
      }) 
     } else { 
      // not interactive, do it 
      self.tabbarController.tabBar.hidden = false 
     } 
    } else { 
     // not interactive, do it 
     self.tabbarController.tabBar.hidden = false 
    } 

---------- GOKUL से कार्य समाधान -----------

गोकुल के जवाब स्पॉट के करीब है पर। मैंने अपने समाधान के साथ खेला है और एक अनावश्यक वीसी रखने की आवश्यकता को खत्म करने के लिए निम्नलिखित सुधार के साथ आया है और टैबवीसी प्रकट होने से पहले एक संक्षिप्त सेकंड के लिए प्रारंभिक वीसी को भी खत्म कर दिया गया है। लेकिन गोकुल के बिना, मैं कभी इसके साथ कभी नहीं आऊंगा !!

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

समाधान एक वीसी में नेविगेशन नियंत्रक और टैबबार नियंत्रक को एम्बेड करना है। लेकिन यह केवल तभी काम करता है जब NavVC TabBarVC से पहले है। मुझे यकीन नहीं है कि क्यों, लेकिन एकमात्र तरीका जिसने मुझे navVC-> टैबवीसी-> वीसी 1/वीसी 2 को वीवी 1 को पहले एनवीवीसी के साथ एम्बेड करना है, फिर से वीवी 1 पर क्लिक करने के लिए टैबवी को एम्बेड करने के लिए (यह मुझे पहले एक डालने की अनुमति नहीं देगा टैबवीसी और मुझे भी NavVC एम्बेड करने के बाद वीसी 1 पर क्लिक करना पड़ा)।

solution

उत्तर

0

1 रास्ता UIGraphicsGetImageFromCurrentImageContext का उपयोग कर tabbar की एक छवि बनाने और अन्य दृश्य के निचले भाग पर सेट है ...

2 रास्ता एक और नई विंडो है कि में अगले दृश्य दिखाने है टैबबार के ऊपर, इस तरह आपको अब टैबबार को छिपाने की आवश्यकता नहीं है, लेकिन यह नेविगेशन नियंत्रक में ऐसा लगता है, इसलिए इस तरह से

0

टैब बार छुपाएं और अनदेखा करना अनावश्यक है। आपको UINavigationController के अंदर केवल UITabBarController एम्बेड करने की आवश्यकता है। UINavigationController प्रारंभिक वीसी, UITabBarController के रूप में UINavigationController की रूट वीसी के रूप में है।

1

आपकी आवश्यकता के लिए हम आपके दिए गए दृश्य पदानुक्रम में कुछ छोटे बदलाव करने की जरूरत

  • मुझे चरण दर चरण के बारे में बताएं,

    1. अपने की आवश्यकता को पूरा करने के लिए हम एक UIViewController जोड़ने के लिए (मान लें InitialVC) UINavigationController के साथ एम्बेडेड और इसे initial viewcontroller के रूप में बनाएं।किसी भी navigationcontroller एम्बेडेड बिना:

    2. फिर 2 कुलपति (VCA, VCB) // महत्वपूर्ण के साथ एक UITabbarController जोड़ें।

    3. एक segueInitalVC और TabBarController एक अद्वितीय पहचानकर्ता के साथ के बीच (पूर्व: प्रारंभिक) जोड़ें

    4. की viewWillAppear InitalVC में segue प्रदर्शन InitialVC नीचे (के रूप में हमारे डिजाइन के लिए अनावश्यक हम उपयोग कर रहे हैं यह सिर्फ navigationController और tabbarController को पुल करने के लिए)।

      self.performSegueWithIdentifier("Initial", sender: nil) 
      
    5. TabbarController कक्षा में अपनी पीठ बटन छुपाने के लिए, यह सुनिश्चित करता है कि InitialVC पहुंच से बाहर है।

      override func viewDidLoad() { 
           super.viewDidLoad() 
           self.navigationItem.hidesBackButton = true 
          } 
      
    6. अब VCA और VCA1 के बीच एक बटन से एक segue जोड़ने के लिए, इसे बनाने और चलाने के आप VCA1 VCA के tabbar से अधिक पेश देखेंगे thats।

  • हमने क्या बदल दिया है?

      इसके बजाय UINavigationController UITabbarController अंदर हम इसका उल्टा किया है जोड़ने का
    1. । हम नेविगेशन के अंदर सीधे टैबबार नहीं जोड़ सकते हैं ताकि हम इनडिविच का उपयोग कर सकें।

परिणाम:

enter image description here

+0

बहुत अच्छी तरह से समझाया और अच्छा समाधान! बहुत सराहना की। मैंने किसी भी व्यक्ति के लिए उपरोक्त कुछ सुधारों के साथ अपना उत्तर अपडेट किया है जिसकी आवश्यकता है – user172902

+0

आपको एडवर्ड धन्यवाद। :) – Gokul

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