2

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

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    // load iPad nib
} else {
    // load iPhone nib
}

如果我创建 2 ViewControllers,那么IBAction将是多余的。

有什么建议吗?

4

4 回答 4

3

您可能应该只弄清楚设备类型,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
    }
}      
于 2013-03-14T05:44:44.233 回答
0
CGFloat height = [UIscreen mainScreen].bounds.size.height;

if(height==568.00 || height == 480.0)
{
//For iphone 5 and iphone 4

}
else
{
 //For ipad
}
于 2013-03-14T05:16:09.603 回答
0

您可以在 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);
于 2013-03-14T05:37:57.507 回答
0

如果您不使用任何笔尖,那么一切都以编程方式完成,您不想为 iphone 和 ipad 创建两个视图控制器。记住不要依赖于任何静态值。即您的计算应该根据self.view.bounds类似的东西进行(我的意思是创建视图/子视图)。然后,如果某些仅在 iPad 中支持的特定功能进行检查

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

一个视图控制器为您完成了所有工作。

于 2013-03-14T05:47:34.083 回答