2013-01-03 160 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]; 
相关问题