2012-03-17 16 views
6

मैं यह पता लगाने की कोशिश कर रहा हूं कि यह क्यों हो रहा है लेकिन ऐसा लगता है कि, मेरे सार्वभौमिक ऐप के आईपैड संस्करण में, यह आईपैड के बजाय आईफोन .xib लोड कर रहा है।आईपैड के लिए सार्वभौमिक ऐप आईपैड .xib फ़ाइलों को लोड नहीं कर रहा है?

मैंने अपने आईफोन xibs को ~ iphone.xib के प्रत्यय के साथ नामित किया है और मैंने अपने आईपैड लोगों को सिर्फ .xib के साथ छोड़ा है। मैंने ऐसा करने के लिए पढ़ा क्योंकि किसी ने कहा कि उनके लिए काम किया लेकिन मेरे मामले में यह मेरे लिए काम नहीं किया!

भले ही मैं विभिन्न .xib फ़ाइलों के लिए ~ ipad.xib और ~ iphone.xib करता हूं, फिर भी यह आईफोन संस्करण लोड करता है!

* * क्या यह पूरी तरह पुष्टि करने का कोई तरीका है कि यह आईपैड संस्करण के बजाय आईफोन संस्करण लोड कर रहा है?

और वहाँ इस मुद्दे ताकि आईपैड लोड करता आईपैड .xibs? **

धन्यवाद ठीक करने के लिए किसी भी तरह से है!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

// Override point for customization after application launch. 
    self.viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]] autorelease]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

यह मेरे लिए काम करता है ... अजीब। लेकिन क्या ऐप वास्तव में सार्वभौमिक है? क्या यह "फुलस्क्रीन" में चलाता है? – fbernardo

+0

हां यह पूर्ण स्क्रीन चलाता है। प्रोजेक्ट सेटिंग्स और लक्ष्य सेटिंग्स में डिवाइस परिवार दोनों "आईफोन/आईपैड" हैं। क्या आप दो अलग-अलग प्रत्यय का उपयोग करते हैं या आप किस अन्य तरीके का उपयोग करते हैं? –

+0

नियंत्रक ~ ipad.xib और नियंत्रक ~ iphone.xib और फिर कोड में मैं बस [[नियंत्रक आवंटन] initWithNibName: @ "नियंत्रक" बंडल: nil] पर कॉल करता हूं; – fbernardo

उत्तर

4

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

मेरे AppDelegate.h फ़ाइल (इसे का एक हिस्सा)

@class FirstViewController; 
@class FirstIpadViewController;  
....... 
....... 
@property (nonatomic, retain) IBOutlet FirstViewController *viewController; 
@property (nonatomic, retain) IBOutlet FirstIpadViewController *ipadViewController; 

मेरे AppDelegate.m फ़ाइल (इसे का एक हिस्सा)

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
} else { 
    self.window.rootViewController = self.ipadViewController; 
    [self.window makeKeyAndVisible]; 
} 

यह निश्चित रूप से यह करना चाहिए। बस अपने दृश्य नियंत्रक करने के लिए वर्ग और ज फ़ाइल में संपत्ति, बदल सकते हैं और आप :)

संपादित

मैं सिर्फ बाहर पाया है इसे कैसे करना प्रारंभ करने के लिए होना चाहिए। और उचित नामकरण सम्मेलन _iPhone और iPad हैं। यह मूल रूप से जैसा कि मैंने ऊपर पोस्ट किया है, केवल परिवर्तन यह है कि इसमें वही होगा। एच और। एम फाइलें, लेकिन विभिन्न एक्सआईबी।

AppDelegate में दाखिल मीटर अपने स्वयं के कस्टम xibs का उपयोग करते समय

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
    } else { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
    } 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

अफसोस की बात है कि मैं दोनों कक्षाओं के लिए एक वर्ग का उपयोग करता हूं तो मैं इसके साथ इस कामकाज को कैसे करूं? इसके अलावा मेरे पास IBOutlets को जोड़ने के लिए mainWindow.xib नहीं है, मैं इसे प्रोग्रामेटिक रूप से कनेक्ट करता हूं। –

+0

ठीक है, बस पता चला। उत्तर में कोड अपडेट किया गया :) –

+0

ओह मैं देखता हूँ! तो यह ~ iphone.xib और ~ ipad.xib नहीं है बल्कि इसके बजाय _iPhone.xib और _iPad.xib है? –

0

यह समाधान स्टोरीबोर्ड उन के साथ काम करता है। यह विचारों के लिए एक ही ज & मीटर फ़ाइलें पुनः उपयोग कर लेता:

  • ViewController.h
  • ViewController.m
  • ViewController.xib
  • ViewController ~ iPad.xib

में आपकी ViewController.m फ़ाइल जोड़ें:

- (id)initWithCoder:(NSCoder *)aDecoder 
    { 
     if (self) 
     { 
      NSString* nibName = NSStringFromClass([self class]); 
      if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
      { 
       self = [super initWithNibName:nibName bundle:nil]; 
      } 
      else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
      { 
       self = [super initWithNibName:[nibName stringByAppendingString:@"~iPad"] bundle:nil]; 
      } 
      return self; 
     } 
     return self; 
    } 

बस xibs को फ़ाइल का स्वामी देखें नियंत्रक कस्टम क्लास नाम सेट और व्यू आउटलेट सेट की जांच करें।

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