2013-01-03 80 views
1

如何爲我的iPhone應用程序加載單獨的nib文件,以檢查用戶是否擁有iPhone 5/iPod Touch 4英寸屏幕與3.5英寸屏幕?如何爲iPhone 4英寸和iPhone 3.5英寸加載獨立的NIB文件?

這是在init方法中完成的嗎?

詳情 - 我沒有爲整個應用程序使用故事板。有一次,我使用故事板並從視圖控制器中調用它。 (有沒有辦法來區分的故事板呢?)

  • 我找的初始化在每個單獨的viewController ...不是東西,我會把在只運行一次的appdelegate的解決方案。

  • Autolayout在很多情況下都不適用於我。設計非常具有圖形效果,太多的空白空間使得外觀看起來很糟糕。

回答

3

我找到了一種方法!

  • 我使單獨的榫文件,一個用於3.5"/iPhone非視網膜和一個用於iPhone5的
  • 我使用宏來檢查當前電話是一個iPhone 5格式與否。(1)
  • 對於普通initWithNibName:包:我寫一個例外,這樣它們不使用正常初始化我命名爲@「初始化錯誤」
  • 我創建了一個新的指定初始化爲的viewController其命名爲initForFormat:
  • 我使用我的宏,並檢查如果設備是iPhone 5或不。如果它是iphone5然後我筆尖名初始化ViewControllerIphone5

我這個宏從https://stackoverflow.com/a/13068238/1492368從RayOfHope

#define HEIGHT_IPHONE_5 568 
#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5) 

所以在新的指定初始化initForLayout:我寫

if(IS_IPHONE_5) 
    { 
     self=[super initWithNibName:@"DetailViewControlleriPhone5" bundle:nil]; 
    } 
    else 
    { 
     self=[super initWithNibName:@"DetailViewController" bundle:nil]; 
    } 

舊的初始化程序

使用標準的初始化

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 

    @throw [NSException exceptionWithName:@"Wrong initializer" 
            reason:@"Use initForLayout:" 
           userInfo:nil]; 
    return nil; 
} 

從另一個視圖控制器/ AppDelegate中 因此調用視圖控制器,當我從另一個視圖控制器調用此DetailViewController時 拋出一個異常:

我瞭解到這個來自大書呆子牧場或者我的appdelegate寫:

DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout]; 
相關問題