एक स्टोरीबोर्ड "कंटेनर दृश्य" सिर्फ एक मानक UIView
वस्तु है। कोई विशेष "कंटेनर दृश्य" प्रकार नहीं है। वास्तव में, यदि आप पदानुक्रम को देखते हैं, तो आप देख सकते हैं कि "कंटेनर दृश्य" एक मानक है UIView
:
इस प्रोग्राम को प्राप्त करने के लिए, आप "व्यू कंट्रोलर कंटेंट" को नियोजित करते हैं:
instantiateViewController(withIdentifier:)
स्टोरीबोर्ड ऑब्जेक्ट पर कॉल करके चाइल्ड व्यू कंट्रोलर को इंस्टेंट करें ।
addChild
अपने पैरेंट व्यू कंट्रोलर में कॉल करें।
view
अपने दृश्य पदानुक्रम के साथ दृश्य नियंत्रक जोड़ें addSubview
(और frame
उपयुक्त के रूप में या बाधाओं को भी सेट करें )।
didMove(toParent:)
चाइल्ड व्यू कंट्रोलर पर विधि को कॉल करें , पेरेंट व्यू कंट्रोलर के संदर्भ को पास करना।
देखें एक कंटेनर देखें नियंत्रक को लागू करने में देखें नियंत्रक गाइड प्रोग्रामिंग और की धारा "एक कंटेनर देखें नियंत्रक को लागू करने" UIViewController कक्षा संदर्भ ।
उदाहरण के लिए, स्विफ्ट 4.2 में ऐसा लग सकता है:
override func viewDidLoad() {
super.viewDidLoad()
let controller = storyboard!.instantiateViewController(withIdentifier: "Second")
addChild(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(controller.view)
NSLayoutConstraint.activate([
controller.view.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
controller.view.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
controller.view.topAnchor.constraint(equalTo: view.topAnchor, constant: 10),
controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -10)
])
controller.didMove(toParent: self)
}
ध्यान दें, ऊपर वास्तव में पदानुक्रम में "कंटेनर दृश्य" नहीं जोड़ा गया है। यदि आप ऐसा करना चाहते हैं, तो आप कुछ ऐसा करेंगे:
override func viewDidLoad() {
super.viewDidLoad()
// add container
let containerView = UIView()
containerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(containerView)
NSLayoutConstraint.activate([
containerView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
containerView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
containerView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10),
containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -10),
])
// add child view controller view to container
let controller = storyboard!.instantiateViewController(withIdentifier: "Second")
addChild(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
containerView.addSubview(controller.view)
NSLayoutConstraint.activate([
controller.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
controller.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
controller.view.topAnchor.constraint(equalTo: containerView.topAnchor),
controller.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])
controller.didMove(toParent: self)
}
यह बाद का पैटर्न बेहद उपयोगी है अगर कभी अलग-अलग चाइल्ड व्यू कंट्रोलर्स के बीच संक्रमण हो और आप सिर्फ यह सुनिश्चित करना चाहते हैं कि एक बच्चे का दृश्य उसी स्थान पर हो और पिछले बच्चे का दृश्य (यानी प्लेसमेंट के लिए सभी अद्वितीय अवरोध कंटेनर दृश्य द्वारा तय किए गए हों,) हर बार इन बाधाओं के पुनर्निर्माण की आवश्यकता के बजाय)। लेकिन अगर केवल साधारण दृश्य नियंत्रण प्रदर्शन करते हैं, तो इस अलग कंटेनर दृश्य की आवश्यकता कम सम्मोहक है।
उपरोक्त उदाहरणों में, मैं खुद को बाधाओं translatesAutosizingMaskIntoConstraints
को false
परिभाषित करने के लिए स्थापित कर रहा हूं। आप स्पष्ट रूप से छोड़ सकते हैं translatesAutosizingMaskIntoConstraints
के रूप में true
है और दोनों सेट frame
और autosizingMask
विचारों आप जोड़ने के लिए, यदि आप चाहें तो के लिए।
स्विफ्ट 3 और स्विफ्ट 2 प्रस्तुतिकरण के लिए इस उत्तर के पिछले संशोधन देखें ।