2012-06-13 13 views
10

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

उत्तर

10

आप एक xib फ़ाइल में कस्टम दृश्य जोड़ते हैं, तो आप एक कस्टम प्रारंभकर्ता का उपयोग नहीं कर सकते हैं। वे सभी initWithCoder का उपयोग करके शुरू किए जाएंगे।

आमतौर पर आप वहां से बुलाए गए एक सामान्य विधि में, या awakeFromNib में सेट अप करेंगे।

यदि आपको अपने दृश्य पर कोई भी कस्टम गुण सेट करने की आवश्यकता है जो इसके बाहर से निकलती है, तो इसे अपने दृश्य नियंत्रक के viewDidLoad में करें।

+0

में ठीक से परिभाषित करना होगा यदि मुझे मेरे दृश्य नियंत्रक के दृश्य को देखने से पहले sth करना है, तो कैसे करें यह तो उदाहरण ... मेरा विचार किसी पुस्तक के एक पृष्ठ को दिखाने के लिए उपयोग किया जाता है।कस्टम init विधि के बिना initWithPage: पृष्ठ, साथ ही मैं स्टोरीबोर्ड का भी उपयोग करता हूं। – Carina

+1

देखने से पहले DidLoad, आपका दृश्य मौजूद नहीं है। केवल उस सेटअप को ले जाएं जो आप init में करते हैं ... एक अलग विधि में और संपत्ति सेट करने के बाद, आपको जो भी परिवर्तन चाहिए, उसे बनाएं। – jrturton

3

बेशक यह संभव है। डिफ़ॉल्ट दृश्य के अंदर xib में uiview खींचें। फिर IBOutlet UIView *myCustomView; बनाएं और फिर इसे दूसरे दृश्य से कनेक्ट करें। जब यू दिखाना चाहते हैं इस दृश्य [self.view addSubview:myCustomView]; के रूप में जोड़ जब दूर करने के लिए यह

[myCustomView removeFromSuperView];

enter image description here

+0

तो ... initWithSomeValue के बारे में कैसे: मूल्य कार्य? – Carina

+0

यदि आप एकाधिक XIB फ़ाइलों में एक कस्टम हेडर व्यू साझा करना चाहते हैं तो यह काम नहीं करेगा ... आपको इसे प्रत्येक xib – LightningStryk

6

व्यू के xib को नियमित तरीके से प्रारंभ करें और संदर्भ का उपयोग करके कस्टम सेटिंग्स करें। इस हिस्से इस-

 -(void)initfunction{ 
     UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"myView" owner:self options:nil] lastObject]; 
     containerView.property1 = xyz;//Customization 
     containerView.property2= abc;//Customization 
     containerView.frame = CGRectMake(x,y,z,p);//Customization 
     [rootView addSubview:containerView]; 


    } 

बिंदु जब हम एक xib का उपयोग हम स्पष्ट रूप से प्रारंभ नहीं है, xib उपयोगिता कार्यों एक प्रारंभ वस्तु (UIView के) लौटने के लिए, एक हो जाता है के बाद है की तरह init विधि में रखा जा सकता UIView ऑब्जेक्ट, वह प्रारंभिक ऑब्जेक्ट का उपयोग केवल कस्टम ऑब्जेक्ट के रूप में कर सकता है ताकि आगे के कस्टम बदलाव किए जा सकें।

0

यूआईएनआईबी (आईओएस) और एनएसएनआईबी (ओएस एक्स) कक्षाएं उन परिस्थितियों में बेहतर प्रदर्शन प्रदान करती हैं जहां आप एक निब फ़ाइल की सामग्री की कई प्रतियां बनाना चाहते हैं। सामान्य निब-लोडिंग प्रक्रिया में डिस्क से nib फ़ाइल पढ़ने और उसके बाद मौजूद वस्तुओं को तुरंत चालू करना शामिल है। हालांकि, यूआईएनआईबी और एनएसएनआईबी कक्षाओं के साथ, निब फ़ाइल एक बार डिस्क से पढ़ी जाती है और सामग्री स्मृति में संग्रहीत होती है। क्योंकि वे स्मृति में हैं, वस्तुओं के लगातार सेट बनाने में कम समय लगता है क्योंकि इसे डिस्क तक पहुंचने की आवश्यकता नहीं होती है।

  1. xib फ़ाइल एक दृश्य बनाएँ: परियोजना पर राइट क्लिक करें -> नई फ़ाइल -> उपयोगकर्ता इंटरफ़ेस -> देखें (जैसे आप "MyView.xib" होगा)
  2. इंटरफ़ेस बिल्डर का उपयोग करके दृश्य भरें

    :
  3. माता पिता घटक

    static UINib *nib = nil; 
    
    - (UIView*)createNewViewFromNib: (NSString *)nibFileName 
    { 
        if(nib == nil) { 
         nib = [UINib nibWithNibName:nibFileName bundle:nil ]; 
        } 
    
        // Unarchiving objects from the nib. You can do it multiple times to create a number of objects from same nib. 
        NSArray* topLevelObjs = [nib instantiateWithOwner:self options:nil]; 
    
        if (topLevelObjs == nil) 
        { 
         NSLog(@"Warning! Could not load nib file.\n"); 
         return nil; 
        } 
        // We have only one view in the nib. 
        return [topLevelObjs objectAtIndex:0]; 
    } 
    
  4. उपयोग कोड की अगली पंक्ति आप पुन: प्रयोज्य निब वस्तु के साथ देखने का दृष्टांत को आप के बगल में विधि जोड़ें

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