iOS设备上显示不正确的界面,但模拟器不显示

时间:2012-08-16 21:30:11

标签: objective-c ios xcode ios-simulator ios-universal-app

我有一个在模拟器上工作正常的通用应用程序但是当我把它放在实际设备(4S和第3代iPad)上时,出现了View控制器界面(“EditNameViewControlleriPhone”,忽略了iPhone是名称的一部分)仅作为iPhone版本,即使我也有一个iPad xib。

以下是我如何命名内容的屏幕截图:

enter image description here

我的SettingViewController中的一个按钮显示EditName界面。这是他的代码:

-(IBAction)editclass{
    EditNameViewControlleriPhone*vc2 = [[EditNameViewControlleriPhone alloc] init];
    vc2.delegate = self;
    [self presentModalViewController:vc2 animated:YES];
}

-(void)dismiss{
    [self dismissModalViewControllerAnimated:YES];
}

这个代码是错误的还是有一些我缺少的命名约定或者是其他什么?对不起,如果这很简单 - 我是Xcode的新手。 感谢

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码手动加载正确的界面:

-(IBAction)editclass{
    EditNameViewControlleriPhone *vc2;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        vc2 = [[EditNameViewControlleriPhone alloc] initWithNibName:@"EditNameViewControlleriPhone_iPhone" bundle:nil];
    } else {
        vc2 = [[EditNameViewControlleriPhone alloc] initWithNibName:@"EditNameViewControlleriPhone_iPad" bundle:nil];
    }
    vc2.delegate = self;
    [self presentModalViewController:vc2 animated:YES];
}

if子句检查您当前的设备是iPad还是iPhone。该子句中的初始化器使用正确的xib文件实例化viewController。


或者,您可以通过遵循简单的命名方案将其留给系统;

EditNameViewControlleriPhone~iphone.xib适用于您的iPhone版本 适用于iPad版的EditNameViewControlleriPhone~ipad.xib

这样,您的代码可能保持不变。


每当您发现设备或模拟器上没有的文件存在差异,反之亦然时,通常的原因是大写字母存在问题。模拟器通常不区分大小写(取决于您的OSX文件系统),设备区分大小写(始终)。


最后但并非最不重要的一点是,如果事情仍然没有合理的解释,那么构建清理通常会产生奇迹。

答案 1 :(得分:0)

Target下,有一个名为Summary的标签,请检查您的界面以控制您使用正确的界面