2008-10-26 9 views

उत्तर

28
  1. इंटरफ़ेस बिल्डर में, दृश्य टेम्पलेट के साथ एक नया xib बनाएं। xib में वस्तुओं की सूची में दृश्य पर
    • क्लिक करें (आप भी पहले प्रत्युत्तर "देखना चाहिए" फाइल के मालिक और ")।
    • पुश Cmd-4 की पहचान फलक खोलने के लिए निरीक्षक।
    • "क्लास नाम" फ़ील्ड में अपने वर्ग का नाम लिखें और बदले धक्का।

आप में सक्षम होना चाहिए घ रैग बटन में। कोड से निब प्राप्त करने के लिए, -[NSBundle loadNibNamed:owner:options:] का उपयोग करें। आपका दृश्य लौटाए गए सरणी में पहली वस्तु होनी चाहिए।

+0

मैं वही काम करने की कोशिश कर रहा हूं - क्या आपको पता है कि मुझे किस वर्गनाम का उपयोग करना चाहिए (ए) अभिभावक यूआईसींट्रोलर व्यू और (बी) कस्टम यूआईवीव स्वयं यहां? मैंने अपने कोड में नोट किया है कि मेरे पास दोनों में मेरा कस्टम UIView क्लास नाम है लेकिन यह मुझे मेरे कस्टम UIView init विधि में एक रिकर्सिव कॉल दे रहा है। मेरे पास है (ए) अभिभावक UIControllerView में जो मेरे कस्टम व्यू का उपयोग करता है, आईबी में इसके XIB के लिए मैं एक UIView का उपयोग करता हूं जिसे मैंने क्लासनाम को "घड़ीदृश्य" पर सेट किया है, लेकिन फिर (बी) मेरे वास्तविक घड़ी दृश्य कस्टम UIView में (UIControllerView नहीं) XIB फ़ाइल मैंने एक ही काम किया है और कक्षा का नाम "घड़ीदृश्य" सेट किया है। – Greg

+0

@ कोलिन क्या हमें वास्तव में 'फ़ाइल के स्वामी' को कस्टम UIView क्लास में सेट करने की आवश्यकता है? मुझे इसे 'UIView' या' myCustomView' पर सेट करने में कोई अंतर नहीं दिख रहा है। इस मामले में 'फाइल के मालिक' का उद्देश्य क्या है? – pixelfreak

+0

मैं कई जगहों पर एक निब के साथ UIView का उपयोग करने में सक्षम होना चाहता हूं। क्या हर बार आईबीओटलेट को तार किए बिना इसे करने का कोई तरीका है? – jowie

3

मेरे मामले में, मैं नहीं चाहता था कि मेरे व्यू कंट्रोलर को मेरे व्यू के .xib से आईबीओटलेट का कोई ज्ञान हो। मैं चाहता था कि मेरा दृश्य सबक्लास आईबीओटलेट्स के मालिक हो। दुर्भाग्य से UIView में initWithNibName: विधि नहीं है, इसलिए मैंने अपनी खुद की श्रेणी बनाई है।

यहाँ मैं क्या किया है:

  • आईबी में, अपने मुख्य UIView पर क्लिक करें, और पहचान निरीक्षक में, अपने उपवर्ग के लिए कक्षा
  • आईबी में, फ़ाइल के मालिक पर क्लिक निर्धारित करते हैं, और में पहचान निरीक्षक, कक्षा को अपने उप-वर्ग
  • पर सेट करें अपने दृश्य को तुरंत चालू करने के लिए अपनी नई श्रेणी विधि initWithNibName: का उपयोग करें।

    - (instancetype)initWithNibName:(NSString *)nibName 
    { 
        NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
        if (arrayOfViews.count < 1) { 
         return nil; 
        } 
    
        self = arrayOfViews[0]; 
    
        return self; 
    } 
    

    this post से प्रेरित होकर:

और यहाँ श्रेणी मैं बनाया है।

नोट हालांकि, अब तक फ्रेम स्वचालित रूप से समायोजित हो जाएगा, इसलिए पोस्ट में कोड के विपरीत, मुझे अभी तक फ्रेम को स्पष्ट रूप से सेट नहीं करना पड़ा है। इसके अलावा, पोस्ट के कोड के विपरीत, मुझे owner:self सेट करने की आवश्यकता है, इसलिए आईबीओलेट्स को सही तरीके से तारित किया जाएगा।

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