2010-06-21 11 views
9

मैं एक दृश्य बना सकते हैं और scrollview में रख पेजिंग अनुमति देने के लिए
कोड हालांकि ठीक काम करता है मैं नहीं कर सका क्या दूसरे शब्दों में एक निब फ़ाइलxcode में nib फ़ाइल से दृश्य कैसे बनाएं?

से विचारों लोड कर रहा है मैं चाहता हूँ के लिए निम्न कोड है "initWithFrame" के बजाय "initWithNibName" का उपयोग करें?

- (void)createPageWithColor:(UIColor *)color forPage:(int)page 
    { 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)]; 
     newView.backgroundColor = color; 
    [scrollView addSubview:newView]; 
    } 

धन्यवाद

बहुत
+0

आप इसे इस तरह से करने के लिए कर रहे थे (और, नहीं है, लेकिन अगर आप कर रहे थे), तुम्हें याद करना चाहते हैं ' [newView रिलीज] 'इसे स्क्रॉल व्यू' में जोड़ने के बाद। आपका स्क्रॉल व्यू दृश्य को तब तक बनाए रखेगा जब यह जोड़ा जाता है, इसलिए यह वास्तव में आपके साथ नहीं है। –

उत्तर

14

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

का निरीक्षण करें:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                owner:self 
                options:nil]; 
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array. 
UIView *myView = [nibContents objectAtIndex:0]; 
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need 
[scrollview addSubview:myView]; 

भूल जाते हैं कि नहीं है कि वास्तव में UIScrollView स्क्रॉल करने के लिए, आपको इसके भीतर माल का आकार है, जो की संभावना .frame संपत्ति से भी बड़ा है करने के लिए अपने contentSize संपत्ति निर्धारित करने की आवश्यकता के लिए स्क्रॉल दृश्य स्वयं ही।

+0

जो मैं बात कर रहा हूं :) धन्यवाद दान, आपका समाधान पूरी तरह से काम करता है, हां मैंने स्क्रॉलव्यू पर विचारों की स्थिति बदल दी है जैसे "scrollView.frame.size।एक्स समन्वयक के लिए चौड़ाई * पृष्ठ "धन्यवाद, आपने मेरा दिन बनाया :) – ahmed

3

कुछ इस तरह का प्रयास करें (से "iPhone डेवलपर्स कुकबुक" अनुकूलित, स्नातकोत्तर 174।):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject]; 

यह आपके .xib के एक ही दृश्य वस्तु मान लिया गया है, लेकिन अगर आप .xib अधिक जटिल हैं तो आप इसे संशोधित कर सकते हैं।

+0

ग्रेट जॉन, लेकिन मुझे newView की स्थिति निर्दिष्ट करने की आवश्यकता है क्योंकि मैं इसे स्क्रॉलव्यू – ahmed

+0

में जोड़ रहा हूं @ जॉन एन याद किया गया लेकिन मुझे याद आया कि उसने इसे याद नहीं किया है। अत: कोई बात नहीं! –

20

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं एक अलग फ़ाइल के रूप में एक UIView बनाना चाहता हूं और एक xib जोड़ना चाहता हूं ताकि मैं इसे अपने ऐप में कई स्थानों पर उपयोग कर सकूं (लगभग कस्टम टेबल व्यू सेल के रूप में इसका उपयोग करना) । और मुझे यह बिल्कुल सही नहीं मिला, लेकिन इस पोस्ट ने मुझे जो परिणाम चाहिए, उसे पाने में मदद की।

तो बस अगर कोई यह उसी तरह करना चाहता है, यह मैं क्या किया है:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0]; 
    if (self) 
    { 
     self.frame = frame; 
    } 
    return self; 
} 

फिर इंटरफ़ेस बिल्डर में:

अपने UIView के मीटर फ़ाइल में प्रवर्तन कोड को यह जोड़े/xib संपादक आपको UIView के लिए बनाए गए वर्ग को असाइन करना होगा ताकि आप IBOutlets जोड़ सकें।

आशा है कि यह किसी की मदद करेगा, cuz यह मुझे थोड़ा सा ले गया!

+0

धन्यवाद @ मैट डब्ल्यू – Meet

+2

कोई नया सीजीआरईटी बनाने की ज़रूरत नहीं है, आप बस 'self.frame = frame' –

+0

शानदार कर सकते हैं! बढ़िया! महान समाधान! – bbrame

-1

आप एक विधि कॉल के साथ nib फ़ाइल से दृश्य बनाने के लिए मेरी सरल कक्षा https://github.com/ulian-onua/KRNNib का उपयोग कर सकते हैं।
उदाहरण के लिए, यदि आप एक तरह से अगले KRNNib उपयोग कर सकते हैं:

UIView *view = [KRNNib viewFromNibWithName:@"TestView"]; 
[self.view addSubview:view]; // add instantiated view as subview to view of current UIViewController 
संबंधित मुद्दे