2

我有一个想要制作 Universal 的 iPad 应用程序,但这似乎非常困难。我已经改变了一些东西,以便我支持这两种构建,但是在构建时,我遇到了很多关于使用 UIPopOvers 的错误。这是我的问题:

  • 为什么UI_USER_INTERFACE_IDIOM()在 3.1.3 上不编译或注册?
  • 我可以有条件地在基于的类定义中包含变量UI_USER_INTERFACE_IDIOM()吗?
  • 如果没有,我应该制作两个不同的视图控制器吗?

谢谢!

4

2 回答 2

3

为什么 UI_USER_INTERFACE_IDIOM() 不能在 3.1.3 上编译或注册?

UI_USER_INTERFACE_IDIOM宏仅从 3.2 开始可用。UIDeviceuserInterfaceIdiom的属性也有同样的限制。这意味着您只能从 SDK 3.2 开始获得通用应用程序。

我可以有条件地在基于 UI_USER_INTERFACE_IDIOM() 的类定义中包含变量吗?

不,UI_USER_INTERFACE_IDIOM宏只是获取设备当前 UI 惯用语的运行时快捷方式。

如果没有,我应该制作两个不同的视图控制器吗?

如果您在两个设备之间有非常不同的 UI,那么使用两个不同的视图控制器并使用UI_USER_INTERFACE_IDIOM宏在运行时(例如在应用程序控制器中)创建正确的视图控制器会更明智。

于 2010-06-02T06:06:51.380 回答
2

我很幸运,只需选择目标然后转到 Project->Upgrade current target for iPad。

我的应用程序非常简单,主要由表格视图和 web 视图组成,但值得备份并尝试...

是的,您必须将其作为可针对 3.1 的 3.2 应用程序提交。*

您还需要做很多其他事情:确保可以在任何方向查看它(为此第一次被拒绝)。确保您已创建所有新图像。你必须有 3 或 4 个图标,而不是像 iPhone 应用程序那样只需要一个。(iPad 图标、iPhone 图标、聚光灯小图标等)。当然还有适用于商店的 iPad 大小的屏幕截图。

我用来测试它是 iPad 还是 iPhone 的一个非常好的方法是检查设备是否可以使用拆分视图控制器,因为在可预见的未来,没有像 iPhone 这样小屏幕的设备能够使用拆分视图控制器。我刚刚创建了一个函数来为我执行此操作:

+(BOOL)isIpad{ return NSClassFromString(@"UISplitViewController") != nil; }

然后在我的应用程序中的任何地方,如果我想根据设备显示不同的东西,我只需检查一下:

int width = 150;
if([NabAppDelegate isIpad]){
   width = 350;
} else {
   width = 150;
}
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5,10,width,25)];

这比像我看到的一些建议那样检查操作系统版本要好得多。

于 2010-06-02T14:50:01.500 回答