2012-04-05 20 views
7

क्षमा करें अगर यह एक मूर्ख सवाल है, लेकिन मैंने कुछ googling किया है और एसओ खोजा है और किसी को भी यह सही सवाल नहीं पूछा है।इंटरफ़ेस बिल्डर में यूनिवर्सल ऐप के लिए एकल .xib बनाएं? (आईओएस)

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

मुझे अलग-अलग बनाने के लिए मुझे मूर्खतापूर्ण लगता है; इंटरफ़ेस बिल्डर में एक से अधिक बार काम करने के लिए दो बार काम क्यों करते हैं जब मैं कोड में एक बार (स्क्रीन आकार के लिए मामूली समायोजन के साथ) कर सकता हूं?

कृपया मुझे बताएं कि क्या मैं यहां कुछ खो रहा/गलत समझ रहा हूं। नहीं मैं पिछले जहां iPhone और iPad संस्करणों समान थे में App स्टोर करने के लिए गैर इंटरफ़ेस निर्माता खेल प्रस्तुत की है, तो मैं कर रहा हूँ: जैसे मैंने कहा, मैं पूरी तरह से इंटरफ़ेस बिल्डर नौसिखिया :)

संपादित कर रहा हूँ गेम को प्रत्येक डिवाइस पर अलग दिखने/महसूस करने से संबंधित है। पहलू अनुपात में अंतर के कारण मैं कुछ मामूली स्थिति परिवर्तनों के अलावा, बिल्कुल वही दिखने का इरादा रखता हूं।

उत्तर

10

यदि आप जानते हैं कि परिणामी दृश्य ऑटोरेसाइजिंग के आधार पर कैसा दिखता है, तो आप वास्तव में केवल एक .xib का उपयोग कर सकते हैं। अगर काम एक साझा घटक है, तो यह आसान हो सकता है कि आप इसे जितना चाहें उतना ऑटोरियोज़ कर सकते हैं। हालांकि, यदि आपको आईफोन पर आईपैड पर अलग-अलग तरीके से देखने के लिए दृश्य की आवश्यकता है, तो बस दो .xib एस का उपयोग करें।यह उचित एक के रूप में की जरूरत है, उदाहरण के प्रारंभकर्ता में उदाहरण के लिए, लोड करने के लिए इस नियंत्रक के -init की तरह तो संभव है:

- (id)init 
{ 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) 
    { 
     self = [super initWithNibName:@"YourNibForPad" bundle:nil]; 
    } 
    else 
    { 
     self = [super initWithNibName:@"YourNibForPhone" bundle:nil]; 
    } 
    if (self) { /* initialize other ivars */ } 
    return self; 
} 
+0

क्या आप आगे बता सकते हैं, कृपया? मैं समझता हूं कि फ़ाइलों को अलग से कैसे लोड किया जाए, लेकिन मुझे यह नहीं करना पड़ेगा। जब मैं एक नया दृश्य-आधारित अनुप्रयोग बनाता हूं, तो यह स्वचालित रूप से आईपैड और आईफोन के लिए एक अलग xib बनाता है। मैं सिर्फ एक का उपयोग कैसे कर सकता हूं और इसे दोनों उपकरणों से लिंक कर सकता हूं? धन्यवाद! – WendiKidd

+1

यदि आप वास्तव में, वास्तव में, वास्तव में इसकी आवश्यकता है, तो बस अन्य xib को हटाएं और जिसकी आपको आवश्यकता होगी उसे रखें, और इसका नाम '-initWithNibName: bundle:' पर ​​पैरामीटर के रूप में पास करें। यह भी सुनिश्चित करें कि उस xib से लोड किया गया दृश्य दोनों उपकरणों पर अच्छा व्यवहार करेगा, जैसे ऑटोरेसाइजिंग नियम आदि। – themarketka

+0

शानदार! यही वह है जिसकी तलाश में मैं हूं; मैं अब खुद को समझने के लिए थोड़ा मूर्ख महसूस करता हूं। आपके उत्तर के लिए बहुत बहुत धन्यवाद! यह वही था जो मुझे चाहिए :) – WendiKidd

3

मुख्य कारण यह है कि एक्सआईबी अलग फाइलें हैं क्योंकि ऐप्पल का मानना ​​है कि आईफ़ोन/आईपॉड स्पर्श और आईपैड के लिए डिज़ाइन किए गए यूआई क्रमशः प्रत्येक के अनुरूप बनाए जाएंगे। यह उनकी उनके iOS App Programming Guide में गूँजती है, जो निम्नलिखित कहते हैं:

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

जबकि यह क्या प्रभावी ढंग से एक यूआई है के लिए दो XIBs बनाए रखने के लिए, मैं इसे चारों ओर प्रोग्राम के रूप में उन्हें स्थानांतरित करने के लिए एक XIB का उपयोग कर और उसके बाद क्रम में अपने UI तत्व में अधिकांश कनेक्ट करने के लिए होने की तुलना में अधिक स्पष्ट है लग रहा है समय लग सकता है जब वह एक्सआईबी लोड होता है। आखिरकार, दो XIB कम से कम आप देख सकते हैं प्रत्येक यूआई कैसा दिखता है, और उसके बाद दृश्य परिवर्तन आसानी से बनाते हैं।

एक तरफ, आईओएस 5 के स्टोरीबोर्ड (read about them here) को न भूलें, जो दृश्य/दृश्य नियंत्रक पदानुक्रम को बहुत आसान बनाते हैं।

+0

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

+0

क्या आप क्वार्ट्ज या किसी अन्य ड्राइंग विधि का उपयोग करके सीधे दृश्य में आकर्षित करने की योजना बना रहे हैं? –

+0

या शायद यह बेहतर है कि हम जानते हैं कि आपका यूआई क्या करने जा रहा है, और यदि यह स्टॉक आईबी तत्वों के साथ भारी होने वाला है, तो कनेक्ट होने की आवश्यकता होगी। –

0

यदि आप आईबी का उपयोग करते हैं, तो आपको आईफोन और आईपैड के लिए 2 अलग-अलग xib फाइलें बनाने की आवश्यकता है। ऐप्पल आईपैड यूआई दिशानिर्देशों का अनुपालन करने के लिए आपको एक अलग आईपैड xib की आवश्यकता है।

+0

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

1

कोशिश उन्हें नाम देने के

MyCell.xib और MyCell ~ ipad.xib

तो

:

[self.tableView registerNib: @"MyCell" forCellReuseIdentifier: @"MyUniqueIdentifier"];