मेरे पास एक मुख्य व्यू कंट्रोलर है जिसमें मैं चाइल्ड व्यू कंट्रोलर की एक अपरिभाषित गिनती का एक छोटा ग्रिड जैसा गठन दिखाना चाहता हूं। चाइल्ड व्यू कंट्रोलर डेटा के आधार पर बनाया गया है और इसलिए मैं उनकी गिनती पहले से नहीं जान सकता। जैसा लगता है, मैं केवल f.ex के साथ बातचीत कर सकता हूं। चाइल्ड व्यू कंट्रोलर में बटन अगर इसे मेन व्यू कंट्रोलर (एक घोषित वैरिएबल में एफएक्स) द्वारा बनाए रखा जाता है - तो मेरा सवाल यह है कि मैं मेन व्यू कंट्रोलर और [एक्स] के बीच संदर्भ को कैसे बनाए रख सकता हूं - चाइल्ड व्यू कंट्रोलर की संख्या उन्हें व्यक्तिगत घोषित किए बिना चर?

मैंने चाइल्डकंट्रोलर पर पैरेंट वेरिएबल बनाने की कोशिश की है और इसे मेन व्यू कंट्रोलर पर सेट किया है, लेकिन यह समस्या का समाधान नहीं करता है - (चाइल्ड व्यू कंट्रोलर में बटन केवल तभी काम करने योग्य होते हैं जब मैं प्रत्येक चाइल्डकंट्रोलर को व्यक्तिगत रूप से घोषित करता हूं ..) मैंने कोशिश की है चाइल्डकंट्रोलर्स की एक सरणी बनाएं और उन्हें मेन व्यू कंट्रोलर में जोड़ें, लेकिन यह भी काम नहीं करता है।

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

0
PeterAntonsen 20 जून 2017, 15:33

1 उत्तर

सबसे बढ़िया उत्तर

अगर मैं आपका प्रश्न सही ढंग से समझ गया:

UIViewController की एक संपत्ति childViewControllers है जो एक सरणी है।

आप https://developer.apple.com/documentation/uikit/uiviewcontroller पढ़ सकते हैं। चाइल्ड व्यू कंट्रोलर को ठीक से जोड़ने का तरीका समझने के लिए कंटेनर व्यू कंट्रोलर को लागू करना सेक्शन है।

फिर आप इस तरह से [x] चाइल्ड व्यू कंट्रोलर प्राप्त करने के लिए केवल सरणी सबस्क्रिप्ट का उपयोग कर सकते हैं:

myContainerViewController.childViewControllers[x].whateverButton ...
// or
let childX = myContainerViewController.childViewControllers[x]
childX.doSomething()

आपके पैरेंट व्यू कंट्रोलर में childViewControllers सरणी आपको चाइल्ड व्यू कंट्रोलर बनाए रखेगी।

संपादित करें:

यदि आपको अपने उपवर्गों के गुणों तक पहुंच की आवश्यकता है तो आपको UIViewController को अपने उपवर्ग में डाउनकास्ट करना होगा स्विफ्ट4 लिंक, स्विफ्ट3 के लिए समान होना चाहिए

आप इस तरह नीचा दिखाते हैं:

if let child = mycontainerVC.childViewControllers[x] as? MySubclassOfUIViewController {
    child.subclassProperty = 1 // or whatever
}
0
iur 20 जून 2017, 16:17
बहुत - बहुत धन्यवाद! :-) जब मैंने सरणी-समाधान की कोशिश की तो मैंने एक रूकी-गलती की होगी क्योंकि मैं इसे पहले काम नहीं कर सका (मेरे बच्चे नियंत्रकों पर कोई प्रतिक्रिया नहीं) लेकिन इसे फिर से आजमाने से यह ठीक काम करता है, साथ ही जानकारी भी "AddChildViewController (_ :)" का उपयोग करने के बारे में दस्तावेज़ीकरण में भी मेरे लिए काम करता है।
 – 
PeterAntonsen
20 जून 2017, 17:39