2011-02-02 15 views
11

से कस्टम UIView मैं चीजों को व्यवस्थित रखने और अपने ऐप के दृश्यों का पदानुक्रम बनाने की कोशिश कर रहा हूं। तो उदाहरण के लिए, मैं कुछ पाठ प्रदर्शित करने के लिए एक कस्टम दृश्य बनाना चाहता हूं, प्रगति प्रदर्शित करने के लिए एक और कस्टम दृश्य और फिर व्यू-आधारित एप्लिकेशन टेम्पलेट के साथ बनाए गए मुख्य दृश्य में उन सभी दृश्यों का उपयोग करना चाहता हूं।इंटरफ़ेस बिल्डर

मैं बनाने का तरीका यह पता प्रोग्राम के रूप में - आप UIView उपवर्ग बनाने के लिए, drawRect तरीका लागू, एक खाली UIView इंटरफ़ेस बिल्डर में जगह है और मौका कक्षा अपने कस्टम वर्ग के लिए है। मेरी समस्या यह है कि मैं उन कस्टम व्यू के को इंटरफ़ेस बिल्डर में प्रोग्रामेटिक रूप से बनाना चाहता हूं।

अब तक मैं साथ XIB फ़ाइल UIViewController नियंत्रक बना लिया है और टेम्पलेट से देखने नियंत्रक के viewDidLoad विधि में मुझे लगता है कि कस्टम दृश्य नियंत्रक उदाहरण बना सकते हैं और जोड़ने है कि खाली UIView इंटरफ़ेस बिल्डर में जोड़ा की एक subview के रूप में यह दृश्य है (वैसे ही आप प्रोग्रामेटिक दृष्टिकोण में कक्षा बदल देंगे)।

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

उत्तर

0

शायद मैं आपको समझ नहीं पाया?
आपके पास इंटरफेस बिल्डर में लाइब्रेरी है, आप जो भी घटक चाहते हैं उसे ले जा सकते हैं और इसे अपने दृश्य पर रख सकते हैं। (आप UIView जोड़कर एक और दृश्य जोड़ सकते हैं और चौथे टैब में अपना वर्ग नाम बदल सकते हैं)।
तो आप आईबीओलेट के साथ युद्ध घोषित करते हैं और उन्हें अपने फाइल के मालिकों के दूसरे टैब से उनके घटकों से जोड़ते हैं ... एक और सवाल?

+0

हम्म .. मान लें कि मेरे पास मेरे प्रोजेक्ट में 4 एक्सआईबी हैं - 2 "मानक" व्यू-आधारित एप्लिकेशन टेम्पलेट XIBs: MainWindows.xib और TestViewController.xib। अब चीजों को साफ रखने के लिए मैं 2 अतिरिक्त दृश्य बनाना चाहता हूं - एक और XIB में प्रत्येक दृश्य: CustomTextView.xib और CustomProgressView.xib। मैं पहले और UILabel UIProgressView को पहले में UILabel और UIButton जोड़ता हूं। अब मैं उन दो कस्टम दृश्यों को अपने TestViewController.xib दृश्य में जोड़ना चाहता हूं। मैं यह कैसे कर सकता हूं (जिस तरह से मैंने इसे किया और XIB डिज़ाइन का उपयोग करके UIView subclass DrawRect में सबकुछ ड्राइंग नहीं किया)? – shw

+0

ठीक है, मुझे लगता है कि मैंने आपको प्राप्त किया है। अगर कस्टमटेक्स्ट व्यू और कस्टम प्रोग्रेस व्यू दृश्य हैं या इसे विस्तारित करते हैं, तो आपको मुख्य मुख्य दृश्य में UIView जोड़ना चाहिए - मुख्य मुख्य विंडो के लिए- और पहचान निरीक्षक (इंस्पेक्टर में चौथा टैब) में आपको UIView से कक्षा बदलनी चाहिए आपकी कक्षा में (कस्टम प्रोग्रेस व्यू उदा।)। – Ratinho

+0

ठीक है - लेकिन इसके लिए मुझे एक कक्षा बनाना है जो UIView का उप-वर्ग है - अन्यथा कस्टम फ़ीक्स्टव्यू कक्षा फ़ील्ड में दिखाई नहीं देगी। यदि मैं ऐसा करता हूं तो मैं इसे कस्टमटेक्स्टव्यू.एक्सआईबी फ़ाइल के साथ "कनेक्ट" कैसे करूं? मैं initWithCoder विधि को ओवरराइड करने में कामयाब रहा, '[NSBundle loadNibNamed]' विधि का उपयोग करके xib लोड करें और पहले यूआईवीव सबक्लास के सबव्यूव के रूप में इसे वापस देखें, लेकिन यह अभी भी हैकिंग जैसा लगता है और ऐसा करने के लिए एक बेहतर तरीका होना चाहिए। – shw

1

इसके लिए काम करने के लिए, आपको इंटरफेस बिल्डर के लिए एक प्लग-इन बनाना होगा जो आपके कस्टम नियंत्रण वर्ग का उपयोग करता है। जैसे ही आप अपना प्लग-इन बनाते और इंस्टॉल करते हैं, आप ड्रैग और ड्रॉप, किसी अन्य विंडो पर अपने दृश्य के उदाहरण या इंटरफेस बिल्डर में देखने के लिए जोड़ सकेंगे। आईबी प्लगइन्स बनाने के बारे में जानने के लिए, Interface Builder Plug-In Programming Guide और हारून हिलेगैस की पुस्तक, Cocoa Programming for Mac OS X से अपना स्वयं का आईबी पैलेट नियंत्रण बनाने का अध्याय देखें।

Herea similar question पर स्वीकृत उत्तर के मूल लेखक का लिंक है।

0

दुर्भाग्यवश, आप ऐसा नहीं कर सकते जो आप UIKit के साथ करना चाहते हैं। आईबी प्लगइन्स केवल ओएस एक्स के लिए काम करते हैं, और ऐप्पल स्पष्ट रूप से उन्हें आईओएस विकास के साथ उपयोग करने की अनुमति नहीं देता है। उनके साथ कुछ करने के लिए स्थिर पुस्तकालय नहीं हैं। कौन जानता है, वे इसे किसी दिन बदल सकते हैं, लेकिन मैं आपकी सांस नहीं पकड़ूंगा।

1

यह मूल रूप से रतििन्हो के धागे में एक टिप्पणी थी, लेकिन बहुत बड़ा हो गया।

हालांकि मेरा स्वयं का अनुभव यहां और ऊपर वर्णित सब कुछ के साथ मिलकर काम करता है, कुछ ऐसी चीजें हैं जो आपके दर्द को कम कर सकती हैं, या कम से कम चीजें कम हैक-आश महसूस करती हैं।

एंबेडेबल व्यू कहें, एक सामान्य वर्ग से अपने सभी कस्टम UIView कक्षाओं को प्राप्त करें। एनआईबी को शुरू करने के लिए निर्धारित करने के लिए कक्षा पहचान (या एक अधिभार योग्य विधि) का उपयोग करके इस बेस क्लास में सभी initWithCoder तर्क को लपेटें। यह अभी भी एक हैक है, लेकिन आप कम से कम इंटरफ़ेस नियमों को औपचारिक बनाने और मशीनरी को छिपाने के लिए।

इसके अतिरिक्त, आप "माइक्रो नियंत्रक" कक्षाओं का उपयोग कर अपने इंटरफेस बिल्डर अनुभव को और बढ़ा सकते हैं जो अपने प्रतिनिधि/कार्य विधियों को संभालने के लिए अपने कस्टम विचारों के साथ जुड़ते हैं और मुख्य प्रतिनिधि के साथ अंतर को अपने स्वयं के प्रतिनिधिमंडल प्रोटोकॉल के माध्यम से अंतर को पुल करते हैं। इन सभी को इंटरफ़ेस बिल्डर के भीतर कनेक्टर का उपयोग करके एक साथ वायर्ड किया जा सकता है।

अंतर्निहित UIViewController को केवल "माइक्रो नियंत्रक" प्रतिनिधिमंडल पैटर्न को संतुष्ट करने के लिए पर्याप्त कार्यक्षमता को लागू करने की आवश्यकता है।

आपके पास पहले से ही कक्षा के नाम को बदलकर और निब लोडिंग को संभालने के द्वारा कस्टम दृश्य जोड़ने का विवरण है। "माइक्रो नियंत्रक" (यदि उपयोग किया जाता है) केवल NSObject व्युत्पन्न कक्षाएं added to the NIB as suggested here हो सकती हैं।

हालांकि मैंने अलग-अलग मामलों में इन सभी चरणों को पूरा किया है, लेकिन मैंने इसे इस तरह के औपचारिक समाधान के लिए कभी भी नहीं लिया है, लेकिन कुछ योजनाओं के साथ यह काफी भरोसेमंद और मजबूत होना चाहिए।

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