iOS - 无需使用笔尖即可支持 iPad 和 iPhone

Posted

技术标签:

【中文标题】iOS - 无需使用笔尖即可支持 iPad 和 iPhone【英文标题】:iOS - Support iPad & iPhone without using nib 【发布时间】:2013-03-14 05:11:55 【问题描述】:

我正在尝试在不使用 nib 的情况下编写应用程序,我会以编程方式完成所有操作。

现在的问题是,我要如何同时支持 iPadiPhone?显然,我不能这样做

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.0always 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的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS / iPad 上编写绘画应用程序的最佳方法

从 iphone 过渡到 ipad 笔尖

适用于 iPhone 和 iPad 的单笔尖

iphone 应用程序错误地包括 ipad 笔尖

单独的方向笔尖

使用iToolab UnlockGo for Mac 无需密码即可解锁 Apple ID