2012-03-17 27 views
6

Tôi đã cố gắng tìm ra lý do tại sao điều này đã xảy ra nhưng có vẻ như, trong phiên bản iPad của ứng dụng toàn cầu của tôi, nó đang tải iPhone .xib thay vì iPad.Ứng dụng toàn cầu dành cho iPad không tải các tệp .xib trên iPad?

Tôi đã đặt tên cho iPhone xib của mình với hậu tố ~ iphone.xib và tôi để lại các iPad của mình chỉ bằng .xib. Tôi đọc để làm điều đó bởi vì ai đó nói rằng làm việc cho họ nhưng trong trường hợp của tôi nó đã không làm việc cho tôi!

Thậm chí nếu tôi làm ~ ipad.xib và ~ iphone.xib cho các tệp .xib khác, nó vẫn tải phiên bản iPhone!

* * Có cách nào để xác nhận hoàn toàn rằng ứng dụng đang tải phiên bản iPhone thay vì phiên bản iPad không?

Và có cách nào để khắc phục vấn đề này để iPad tải .xibs iPad? **

Cảm ơn!

- (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

Nó làm việc cho tôi ... Lạ. Nhưng ứng dụng có thực sự phổ biến không? Nó có chạy trong chế độ toàn màn hình không? – fbernardo

+0

Có nó chạy toàn màn hình. Các gia đình thiết bị trong cài đặt dự án và cài đặt đích đều là "iPhone/iPad". Bạn có sử dụng hai hậu tố khác nhau hay cách khác để bạn sử dụng? –

+0

Controller ~ ipad.xib và Controller ~ iphone.xib và sau đó trong mã tôi chỉ cần gọi [[Controller alloc] initWithNibName: @ "Controller" bundle: nil]; – fbernardo

Trả lời

4

Trong ứng dụng của tôi, tôi làm như thế này. Tôi tạo các tệp .h, .m và XIB riêng biệt cho các chế độ xem iPad và sau đó trong AppDelegate, tôi chỉ cần tạo điều kiện if, quyết định bộ điều khiển xem nào sẽ hiển thị.
Btw. Tôi không sử dụng những hậu tố trên XIB, tôi đặt tên cho những gì tôi muốn.

tập tin của tôi AppDelegate.h (một phần của nó)

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

tập tin AppDelegate.m của tôi (một phần của nó)

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

này chắc chắn nên làm điều đó. Chỉ cần thay đổi lớp và thuộc tính trong file .h, để điều khiển xem của bạn và bạn sẽ được tốt để đi :)

EDIT

Tôi vừa tìm ra cách để làm điều đó. Và các quy ước đặt tên thích hợp là _iPhone và iPad. Điều này về cơ bản giống như tôi đã đăng ở trên, chỉ thay đổi là nó sẽ có cùng các tệp .h và .m, nhưng các XIB khác nhau.

Trong appdelegate .m nộp

- (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

Đáng buồn là tôi sử dụng một lớp cho cả hai xib, vậy làm cách nào để tôi giải quyết vấn đề này? Ngoài ra tôi không có một mainWindow.xib để kết nối IBOutlets, tôi chỉ cần kết nối nó theo lập trình. –

+0

Ok, vừa phát hiện ra. Đã cập nhật mã trong câu trả lời :) –

+0

Oh tôi hiểu rồi! Vì vậy, nó không phải là ~ iphone.xib và ~ ipad.xib nhưng thay vào đó _iPhone.xib và _iPad.xib? –

0

giải pháp này làm việc với Storyboards khi sử dụng xibs tùy chỉnh của riêng bạn. Nó tái sử dụng cùng .h & file .m cho quan điểm:

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

Trong tệp ViewController.m của bạn thê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; 
    } 

Chỉ cần kiểm tra các xibs có tập hợp tên lớp tùy chỉnh chủ sở hữu bộ điều khiển xem của tập tin và bộ đầu ra khung nhìn.

Các vấn đề liên quan