iOS - 无需使用笔尖即可支持 iPad 和 iPhone
Posted
技术标签:
【中文标题】iOS - 无需使用笔尖即可支持 iPad 和 iPhone【英文标题】:iOS - Support iPad & iPhone without using nib 【发布时间】:2013-03-14 05:11:55 【问题描述】:我正在尝试在不使用 nib 的情况下编写应用程序,我会以编程方式完成所有操作。
现在的问题是,我要如何同时支持 iPad 和 iPhone?显然,我不能这样做
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
// load iPad nib
else
// load iPhone nib
如果我创建 2 个 ViewControllers,那么 IBAction
将是多余的。
有什么建议吗?
【问题讨论】:
你可以在上面[UIDevice currentDevice]
条件下单独设置框架,做一般的功能.....我认为不使用这个你不能......
如果一切都是程序化的,那么为什么要创建两个视图控制器?一个就够了
您在创建项目时是否选择了通用应用程序。
在***.com/questions/13139430/…查看我的答案
【参考方案1】:
您可能应该在applicationDidFinishLaunching
中找出设备类型,然后为每个设备加载单独的控制器。但是,如果您只想为所有设备提供一个实现,请执行以下检查:
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
//do some iPad stuff
else
CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
if([UIScreen mainScreen].scale == 2.f && screenH == 568.0f)
//do iPhone 5 stuff
else
//do iPhone 4S and iPhone 4 stuff
//the dimensions are the same however, if you want to do iPhone 4S specific stuff
// you'll need to do additional checks against video resolution or other differences etc
【讨论】:
【参考方案2】:CGFloat height = [UIscreen mainScreen].bounds.size.height;
if(height==568.00 || height == 480.0)
//For iphone 5 and iphone 4
else
//For ipad
【讨论】:
这不适用于 iphone 5 和 iphone 4,因为条件height==568.00 && height == 480.0
是 always false
。
高度不能同时是568(应该是548 BTW)和480,你想要“||”没有“&&”。【参考方案3】:
您可以在 AppDelegate 中使用此代码
- (BOOL) isPad()
if(UI_USER_INTERFACE_IDIOM)
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
else
return NO;
这个链接提供了一些关于成语http://developer.apple.com/library/ios/#documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/macro/UI_USER_INTERFACE_IDIOM的信息
或
您可以查看屏幕的高度和宽度,以了解它是 iPhone 还是 iPad
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
CGFloat height = CGRectGetHeight(screen);
【讨论】:
【参考方案4】:如果您不使用任何 nib,则一切都以编程方式完成,您不想为 iphone 和 ipad 创建两个视图控制器。记住不要依赖于任何静态值。即你的计算应该根据self.view.bounds
类似的东西进行(我的意思是创建视图/子视图)。然后,如果某些仅在 iPad 中支持的特定功能进行检查
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
一个视图控制器为您完成所有工作。
【讨论】:
如果 iPad 的外观与 iPhone 相同,我可以这样做,但如果 iPad 有侧边栏怎么办?那么就有不同的看法 在这种情况下最好创建两个视图控制器。根据设备呈现视图控制器。或者您可以相应地在视图控制器的loadView
方法中加载不同的视图。无论如何,您必须使用委托来处理操作
您的意思是为 1 个 ViewController 创建 2 个视图?但在这种情况下,我必须实现 2 委托对吗?
没有。您的单个视图控制器成为两个视图的代表。如果您有更多冗余代码(iphone/ipad 中的功能几乎相同),请首选此实现。如果处理得当,视图中的更改不会导致任何错误。您可以确保您的按钮具有单个目标(两个视图具有相同的委托)
Check this以上是关于iOS - 无需使用笔尖即可支持 iPad 和 iPhone的主要内容,如果未能解决你的问题,请参考以下文章