为iPhone 5加载不同的xib

时间:2012-10-02 09:59:58

标签: iphone objective-c ios xcode ipad

我的应用程序为iPhone 5提供了额外的功能,我为它创建了一个单独的带有.xib的类。我想检测屏幕高度(除非可以获取设备ID /型号)并相应地加载不同的视图控制器。我试过这个:

- (IBAction)select:(id)sender {

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

if (screenHeight == 960) {

Selection *selectView =[[Selection alloc] initWithNibName:nil bundle:nil];
selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:selectView animated:YES];

}

else {

    Selection_5 *selectView =[[Selection_5 alloc] initWithNibName:nil bundle:nil];
    selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:selectView animated:YES];

}

}

Selection和Selection_5是两个不同的类,每个类都有一个不同的用户界面xib。

3 个答案:

答案 0 :(得分:8)

首先,您不希望按设备类型进行检查。新的iPod touch(具有相同尺寸的屏幕)或未来几年的iPhone会发生什么。

但我认为这里的问题是你要根据实际的像素数检查屏幕尺寸 - 奇怪 - 不是你想要的。请记住,在Retina屏幕上,一切都“加倍”。在UI中,您(大多数)使用“正常”大小来处理所有内容,在这种情况下,是像素数的一半。

简而言之:检查屏幕高度为480(正常)或568(iPhone 5)。

答案 1 :(得分:5)

尝试http://github.com/erica/uidevice-extension/

[[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"

或者您可以像以下一样观看screenHeight:

float screenHeight = [UIScreen mainScreen].bounds.size.height;

对于iPhone 5的身高是568

如果您使用.xib加载,可能是shell来设置nib:

[[Selection alloc] initWithNibName:@"here_is_nibname" bundle:nil];

答案 2 :(得分:5)

在我的应用程序中,我必须为iPhone,iPhone5 / iPod Touch和iPad加载.XIB文件,为此,这是我使用的代码:

// If Iphone/iPod Touch
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
  // If iPhone 5 or new iPod Touch
  if([UIScreen mainScreen].bounds.size.height == 568){
     VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerExt" bundle:nil];
     ...
  } else{
    // Regular iPhone
    VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewController" bundle:nil];
     ...          
  }
// If iPad
} else {
  VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerPad" bundle:nil];
  ...
}

希望能帮助需要的人:)