通用iPad/iPhone XIBs-Xcode 4

通用iPad/iPhone XIBs-Xcode 4,iphone,ipad,xcode4,xib,universal,Iphone,Ipad,Xcode4,Xib,Universal,我想制作一个具有两个不同XIB文件的通用应用程序。一个用于iPhone,一个用于iPad。它们使用相同的代码,只是不同的UI。如何创建“通用”应用程序 谢谢。首先(您说您正在创建一个基于视图的应用程序),基于iPhone或iPad视图创建它 这将为您提供一个appdelegate、一个viewcontroller和一个视图(根据您选择的选项为iPad或iPhone定制) 现在添加另一个xib,转到文件>新文件。。。查看对话框左侧,在iOS组中选择“用户界面”。在右侧窗格中,选择View并单击ne

我想制作一个具有两个不同XIB文件的通用应用程序。一个用于iPhone,一个用于iPad。它们使用相同的代码,只是不同的UI。如何创建“通用”应用程序

谢谢。

首先(您说您正在创建一个基于视图的应用程序),基于iPhone或iPad视图创建它

这将为您提供一个appdelegate、一个viewcontroller和一个视图(根据您选择的选项为iPad或iPhone定制)

现在添加另一个xib,转到文件>新文件。。。查看对话框左侧,在iOS组中选择“用户界面”。在右侧窗格中,选择View并单击next,现在在创建xib时选择iPad或iPhone(基于您最初选择的内容),选择它,然后选择主窗格左侧的文件所有者。然后,转到实用程序(右窗格)并选择Identity inspector(顶部的第三个选项图标),将该类更改为与创建基于视图的应用程序时创建的viewController相同。可以在两个视图上以相同的方式绑定插座,但它们将共享同一个viewController

确定应用程序在运行时运行在哪个设备上,可以使用约定

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
并基于这种条件语句加载视图。为了清楚起见,请记住您使用其名称加载了一个nib,这样您就可以选择与环境相关的nib(如上所述),框架将完成其余工作

请注意,充分利用iPad不动产的应用程序通常不会像你想象的那样直截了当(如果你以前从未这样做过的话),但在专用视图下通常会工作得更好,尽管情况并非总是如此。考虑到屏幕空间的差异,任何动态添加的屏幕组件都需要进行编码


这可以很容易地变成一篇文章,我建议你读一读,看看源代码,然后深入研究。通过实验你会学到很多东西

如果您已有应用程序,则在 目标-->iPad/iPhone升级

然后添加代码检查应用程序是否在iPad或iPhone上运行

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    //load xib of ipad
}
else
{
    //load xib of iphone
}

您还可以使用xcode 4的功能。在创建新项目时,有一个选项称为“通用应用程序”。 基于此模板的应用程序使用上述分离。
您可以获得iphone和ipad的文件夹,其中包含视图。

只需复制xib文件,然后将其重命名为文件名~ipad.xib,将其添加到您的项目中,iOS将自动加载正确的xib文件并引用您的设备。

创建如下宏:

#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
为您的XIB命名,以便您可以执行以下操作:

self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];

在中创建新项目时,可以选择此选项Xcode@PengOne哪里我正在创建一个基于视图的项目。是否正确加载了xib文件…plz chk宏传统上都是大写的。@Richard是这样的。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
 UIInterfaceOrientation des=self.interfaceOrientation;
 if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //ipad
 {
    if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
    {
      //Ipad portarit
    } 
    else
    {
       //ipad landscape
    }
else //iPhone
{
if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
    {
      //iPhone portarit
    } 
    else
    {
       //iPhone landscape
    }
}