0

我有一个适用于 iPad 和 iPhone 的通用 iOS 应用程序。我为 iPad 创建了一个带有 xib 及其的类。我现在如何为 iPhone 设计它?为 iPhone 创建另一个 xib?如果是这样,我如何以及在哪里告诉应用程序在需要时为 iPhone 加载 xib,因为现在它加载 iPad xib,当然一切都太大了。提前致谢

4

3 回答 3

1

是的,您需要两个 nib 文件。您可以initWithNibName通过使用以下代码来检测设备类型来使用和指定 nib 的名称。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)

这将允许您区分不同的设备

于 2012-07-10T10:07:38.730 回答
1

好吧,您的视图控制器有一个名为initWithNibName: bundle:. 做这个:

MyController *controller = [[MyController alloc] initWithNibName:[NSString stringWithFormat:@"myController_%@",deviceName] bundle:nil];

编辑:你必须制作 2 个 xib,对吗?将它们命名为 Settings_iPhone.xib 和 Settings_iPad.xib。当您想显示设置屏幕时,请继续声明

NSString *deviceName = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? @"iPhone" : @"iPad";

在那之后 :

Settings *controller = [[Settings alloc] initWithNibName:[NSString stringWithFormat:@"Settings_%@",deviceName] bundle:nil];
于 2012-07-10T10:05:52.157 回答
1

当我需要做这样的应用程序时,我制作了 2 个 xib 文件,一个用于 iPad,一个用于 iPhone。第一个是使用视图控制器创建的。第二个是通过添加一个接口文件来创建的。我尝试获取有意义的名称(例如:ListNameVC.xib 和 ListNameVC_iPad.xib

在第二个xib上,你需要做两件事

  • 文件的所有者类必须指向正确的 VC 类
  • 您必须将对象中的视图与文件所有者中的视图插座链接(否则您将在执行时崩溃)。

有了这一切,您可以在创建视图控制器时根据设备调用正确的 xib:

ListeNameVC* listeNameVC

if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){
    listeNameVC = [[ListeNameVC alloc] initWithNibName:@"ListeNameVC_iPad" bundle:nil];
} else {
    listeNameVC = [[ListeNameVC alloc] initWithNibName:@"ListeNameVC" bundle:nil];
}

如果您需要在 iPhone 或 iPad 上做不同的事情,您可以在视图控制器中使用 UI_USER_INTERFACE_IDIOM。例如,如果您以编程方式放置 UIButton,或者如果您为 iPhone 和 iPad 设置一个名称的图像

于 2012-07-10T10:13:51.103 回答