我想创建一个具有两个不同XIB文件的通用应用程序。一个用于iPhone,一个用于iPad。他们使用相同的代码,只是不同的UI。我如何创建“通用”应用程序?
感谢。
答案 0 :(得分:6)
只需复制xib文件,然后将其重命名为 FileName~ipad.xib ,将其添加到您的项目中,iOS将自动加载正确的xib文件,参考您的设备。
答案 1 :(得分:5)
首先(您说您正在创建基于视图的应用程序),请根据iPhone或iPad视图创建它。
这将为您提供appdelegate,viewcontroller和视图(根据您选择的选项为iPad或iPhone量身定制)
现在添加另一个xib,转到文件>新文件...查看对话框左侧并选择iOS组中的“用户界面”。在右侧窗格中,选择View并单击next,现在选择iPad或iPhone(基于您最初选择的内容)创建xib时,选择它,然后选择主窗格左侧的文件所有者。然后,转到Utilities(右窗格)并选择Identity inspector(顶部的第3个选项图标),将类更改为与创建基于视图的应用程序时创建的viewController相同。您可以在两个视图上以相同的方式绑定出口,但它们将共享相同的viewController。
确定您的应用在运行时运行的设备,您可以使用约定
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
并根据这种条件语句加载视图。为了清楚起见,请记住使用其名称加载一个笔尖,以便您可以选择与环境相关的笔尖(上图),框架将完成剩下的工作。
请注意,它永远不会像您想象的那样简单(如果您以前从未这样做过)充分利用iPad房地产的应用程序通常倾向于使用专用视图更好地工作,尽管这并非总是如此案子。任何动态添加的屏幕组件都需要进行编码,同时考虑到屏幕空间的差异。
这很容易变成一篇文章,我建议你做一些阅读,查看源代码并深入研究。你只需要通过实验就能学到很多东西。
答案 2 :(得分:1)
像这样创建一个宏:
#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
您的XIB的名称,以便您可以这样做:
self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
答案 3 :(得分:1)
- (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
}
}
答案 4 :(得分:0)
如果你有现有应用程序,那么有选项 目标 - >升级为iPad / iPhone
之后添加代码以检查应用程序是否在iPad或iPhone上运行。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
//load xib of ipad
}
else
{
//load xib of iphone
}
答案 5 :(得分:0)
您还可以使用xcode 4的功能。创建新项目时可以选择一个名为“通用应用程序”的选项。 基于此模板的应用程序使用上述分离。 你可以获得带有视图的iphone和ipad的文件夹。