我有一个iPad应用程序和一个iPhone应用程序。
我想加入他们,以便如果加入应用程序将在iPad上运行它会有一个行为,如果它在iPhone上运行它将有另一个。
我想的第一件事是制作不同的视图并选择iphone / ipad的视图,但我也有一些特定于ipad和iphone的东西(例如:splitViewController)所以只选择一个不同的视图将无济于事
加入2个此类应用的最佳方式是什么?我想要一种比做
之类的更优雅的方法if(isIPhone)
{
// code for iphone
}
else if(isIPad)
{
// code for iPad
}
每次我有两个版本之间的差异。谢谢!
答案 0 :(得分:5)
我相信WWDC 2010会话视频包含一个涵盖此问题的iPad开发概述。
根据Apple的指导,这是我采取的方法:
您可以设置特定于平台的主界面笔尖,这意味着您也可以设置特定于平台的应用程序代理。所以你可能有一个超级应用程序委托,它可以完成所有应用程序设置,然后是子类来部署iPad UI或iPhone UI。
这很有用,因为在iPad上,拆分视图需要交通警察来确定哪些内容在哪里。现在你有一个位置可以将该逻辑独立于视图控制器:在app delegate中。
从那里,只要有一个视图控制器对两个平台都是通用的,但每个平台都有一些特定的行为,就会创建一个处理所有常用功能的视图控制器超类。然后,特定于iPad的子类可以覆盖-refreshView:方法以执行一些额外的动画,或添加属性和委托方法以支持拆分视图。
虽然您绝对可以使用if else
测试iPad-ness,但是当您添加仅在一个平台上重要的委托方法时,这可以在视图控制器中实现真正 gnarly。通过这种方式将其拆分,您可以获得更易于维护和读取的代码。这可能意味着对现有项目进行大量重构。在我的情况下,它只花了大约一个小时,结果是一个非常整洁的应用程序,很容易跳入并修改为一个或两个平台。
答案 1 :(得分:2)
您正在寻找的是:
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
// Do iPad specific stuff.
} else {
// Do iPhone/iPod touch stuff here.
}
答案 2 :(得分:1)
至少在XCode 4中,您可以设置希望每个目标编译的代码,并完全忽略其余代码。因此,理论上,您可以将所有iPad应用程序复制到iPhone应用程序中,然后确保每个应用程序仅引用自己的资源和代码。您可能遇到的唯一问题是命名冲突,但您可以通过使用组和文件夹解决此问题。
这似乎是最简单的方法,因为你已经建成了。这种方法的缺点是你仍然需要单独修复代码中的错误,但你的用户将能够在他们的iPhone和iPad上使用相同的应用程序。
编辑:
请参阅BUILD_PHASES > COPY_BUNDLE_RESOURCES & BUILD_PHASES > COMPILE SOURCES
答案 3 :(得分:0)
你不能只在一个应用程序中加入文件吗?就像你将所有源文件从ipad应用程序复制到iphone应用程序项目(你可能必须重命名sonme,所以没有重复的那些)...然后在你的app委托你有一个if if切换确定是否在ipad和或iphone添加所需的文件
这在使用UITabbarcontroller时特别适合,因为您只需使用ipad或iPhone的rootviews设置控制器......
所有其他源文件保持不变(除了上面提到的重命名)... 不过会增加文件大小,我想..
侧击
答案 4 :(得分:0)
您可以尝试将其转换为xCode 4中的通用应用程序。这是一个简短介绍的链接,让我开始构建通用应用程序。
答案 5 :(得分:0)
非常简单。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// Do iPad stuff
} else {
// Do iPhone stuff
}
但在条件中加载笔尖名称时要小心。希望你知道你必须分别为iPad和iPhone设计.xib。