11

मैं एक दृश्य - PresentedView को एक और दृश्य पर देखना चाहता हूं - Background View आईओएस 7 का उपयोग कर। मेरे ऐप में, मैं UITabBArController का उपयोग कर रहा हूं, इसलिए रनटाइम पर मुझे नहीं पता कि कौन सा दृश्य पृष्ठभूमि दृश्य होगा (टैब बार आइटमों में से कोई भी हो सकता है)। नीचे संरचना होती है:UIModalPresentationStyle.CurrentContext स्विफ्ट आईओएस 7

UITabBarController 
    ---> TabItem1 - FirstUIViewController 
    ---> TabItem2 - SecondUIViewController 
    ---> TabItem3 - ThirdUIViewController 

कुछ इस तरह की जरूरत है:

enter image description here

एप्लिकेशन के लोड, मैं TabItem1 - FirstUIViewController पर हूँ है। जब मैं TabItem3 पर क्लिक करता हूं, तो मुझे पर शीर्ष पर दिखाई देने के लिए ThirdUIViewController और 'FirstUIViewController' पृष्ठभूमि में दिखाई देना चाहिए, जिसमें कोई उपयोगकर्ता इंटरैक्शन सक्षम नहीं है।

मैं अब तक क्या किया:

  1. , के बाद से UIViewControllersRelationship Controllers रूप में जोड़ा जाता में TabBar Item के रूप में प्रकट करने के लिए `UITabBarController, मैं TabBarController से ThridViewController को एक segue गयी।

  2. UIModalPresentationStyle.CurrentContext को यह Segue के लिए बदल दिया है PresentationStyle और सफेद पृष्ठभूमि के साथ संशोधन नीचे किया

    func `viewDidLoad()` { 
        super.viewDidLoad() 
        self.performSegue("identifier", sender: self) 
    } 
    

कुछ नहीं होता और मैं बस देख 'ThridViewController'

  1. मैंने मैन्युअल कोडिंग दृष्टिकोण की कोशिश की:

    func `viewDidLoad()` { 
        super.viewDidLoad() 
        let overlayController:UIThirdViewController = UIThirdViewController() //This controller has a view added on top of it, which covers top half screen only 
        overlayController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext 
        self.presentViewController(overlayController, animated: true, completion: nil) 
    } 
    

कोई बदलाव नहीं। नया दृश्य प्रीवियो दृश्य को ओवरराइड करता है। अगर मैं इस overlayController.view.backgroundColor = UIColor.clearColor() जोड़ने के लिए, मैं आधी स्क्रीन काले और मेरी नई दृश्य आधा युक्त

समस्या अंक देखें:

  1. मैं प्रारंभ करने में कोड कहाँ लिखना चाहिए/फोन ThirdViewController शीर्ष पर प्रकट करने के वर्तमान दृश्य का?
  2. कैसे काली स्क्रीन समस्या को हल करने और यह iOS 7 पर काम करने के लिए?

मैं Xcode 7 उपयोग कर रहा हूँ और iOS7 पर चल रहा है। कृपया मदद करे। वर्किंग कोड स्निपेट की सराहना की जाएगी। जब तक कोड काम करता है & आप अपने दम पर की कोशिश की है, जवाब के रूप में अन्य ढेर अतिप्रवाह पदों पोस्ट न करें।

अद्यतन: - इस दृष्टिकोण के साथ, मैं एक काली स्क्रीन मिल

class TabBarViewController: UITabBarController, UITabBarControllerDelegate { 

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

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 

     let switchController:UIViewController = SwitchViewController() 

     self.presentingViewController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext 
     self.presentingViewController?.view.backgroundColor = UIColor.clearColor() 
     self.presentViewController(switchController, animated: true, completion: nil) 
     return false 
    } 
} 

उत्तर

3

इसे कस्टम कंटेनर व्यू कंट्रोलर बनाएं (Apple Docs)। कार्य उदाहरण कोड:

class MyTabVC: UITabBarController, UITabBarControllerDelegate { 

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

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
     presentThirdVC() 
     return false 
    } 

    func presentThirdVC() { 
     let myThirdVC = MyThirdVC.makeVC() 

     myThirdVC.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.1) 
     addChildViewController(myThirdVC) 
     var newFrame = CGRectInset(view.bounds, 0, 50) // hack, do what you want 
     myThirdVC.view.frame = newFrame 
     view.addSubview(myThirdVC.view) 
     didMoveToParentViewController(myThirdVC) 
    } 

} 

class MyThirdVC: UIViewController { 
    class func makeVC() -> MyThirdVC { 
     return UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("myThirdVC") as! MyThirdVC 
    } 
} 

स्क्रीनशॉट:

enter image description here

+0

में मेरी ** अद्यतन की जांच करें ** यह iOS 7 पर काम करता है? – Sategroup

+0

हां, मुझे विश्वास है कि इन एपीआई addChildViewController के संस्करण समर्थन को देखकर आईओएस 5 के आसपास रहे हैं। – bobics

4

आप UITabBarController उपवर्ग और यह कस्टम उपवर्ग में व्यवहार जोड़ना चाहिए।UITabBarController प्रतिनिधि को self के रूप में सेट करें और फिर जब विशिष्ट इंडेक्स को टैब स्विच करने की बजाय टैप किया जाता है तो आप मेनू को सामान्य रूप से प्रस्तुत करते हैं। UITabBarControllerDelegate विधियों से आपको ऐसा करने का मौका मिलेगा।

specifcally इस प्रतिनिधि विधि का उपयोग कर ....

- tabBarController:shouldSelectViewController: 

आप मेनू पेश कर सकते हैं जब यह कहा जाता है जो कभी टैब और कोई वापसी के लिए। इस टैब के लिए बस आप एक खाली दृश्य नियंत्रक क्योंकि यह उपयोगकर्ता को कभी नहीं दिखाया जाएगा।

संक्रमण के लिए मैं स्क्रीन के आकार की तुलना में थोड़ा छोटा होने के लिए कंटेनर दृश्य फ्रेम सेट करने के लिए UIPresentationController के उप-वर्ग का उपयोग करने की अत्यधिक अनुशंसा करता हूं, और "dimmingView" में जोड़ता हूं। यह केवल आईओएस 8 पर उपलब्ध है हालांकि यदि आप आईओएस 7 चाहते हैं तो आपको और अधिक हैकिश चीजें करने की आवश्यकता होगी।

+0

वर्णन – Sategroup