iPhone 移植到 iPad:
默认情况下,所有的iPhone程序都会运行在他们原始的屏幕大小320x480(非全屏状态),如果你想让你的程序运行在iPad上,且为全屏状态,你需要修改项目设置你们的Targeted Device Family选为iPhone/iPad(这种模式使你的程序可以自动检测运行的设备类型,并使你的程序全屏显示)。
现在可以使你的程序运行在iPad上了。但是,你会看到你的界面(UI)和iPhone下面完全一样,这不是我们需要的。所以,重新布局你的Views是程序员的责任,即重定位(reposition)Views。
首先,我们需要手工检测运行的设备类型。(使用预编译命令)
#if(__IPHONE_OS_VERSION_MAX_ALLOWED>=30200)
NSString *str;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){
//iPad 版本代码;
}
else
//iPhone/iPod touch 版本代码;
#endif
或者
#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)。UI_USER_INTERFACE_IDIOM()方法返回值UIUserInterfaceIdiomPhone或UIUserInterfaceIdiomPad。
▪ 方法二 建立通用类型程序(两套代码及XIB界面文件,两套代码及界面互不相干)
上一种方法的缺点是,你必须自己写两个版本(iPhone/iPod 和iPad)的代码来适配不同的平台,同时要动态修改UI布局(及控件尺寸等),是挑战,但也很痛苦。所以,Apple建议你创建“Universal”,即通用型的应用。这样的应用可以在iPhone和iPad下面运行。这需要为各个平台建立相应的.h,.m和.xib文件。后台业务代码自然要写在相应版本的.h,.m文件里面。
这种情况下,你会得到两个可执行体(executables),一个for iPhone/iPod touch,一个 for iPad。
这样的话,与方法二建立相应的-iPad版本文件不同的是,这里是将iPhone版本的文件直接拷贝进Resource-iPad文件夹,文件名称一样。代码只需要一份,只不过需要把Resource和Resource-iPad文件夹下的xxViewController的File's Owner都设置为Classes文件夹里面的同一个xxViewController类就可以了,其他界面UI元素设置连接到File's Owner。同时,会产生两个版本的可执行体(executables),“projectname”.app和“projectname”-Upgraded.app。
看到的效果是:同一套代码处理过的相同结果的界面。
总结:由于实际项目后台生成控件,尤其是TableView会比较多,为了适应iPhone和iPad,可以考虑用第三种方法,一套代码,两套XIB界面。后台加载时,用:
if(isiPad){
UITableViewController *tableViewController=[[UITableViewController alloc] initWithNibName:@"iPadxxViewController" bundle:nil];
}
else {
UITableViewController *tableViewController=[[UITableViewController alloc] initWithNibName:@"iPhonexxViewController" bundle:nil];
}
即可。iPadxxViewController和iPhonexxViewController分别代表相应的iPadxxViewController.xib和iPhonexxViewController.xib文件。
希望对大家有用