ipad预编译器
Posted
技术标签:
【中文标题】ipad预编译器【英文标题】:precompiler for ipad 【发布时间】:2010-09-16 21:25:42 【问题描述】:大家好,
在 xcode 中,我尝试加载不同的 nib 文件,以防我使用 iphone/ipod 或 ipad。
我有一个包含所有枚举和常量的 Define.h 文件,所以我想在其中放入一种(显然错误,因为我不知道该怎么做):
#if IPHONE // <-- can I intercept the Active Executable here ?
#define MY_VIEW @"TableViewIphone.xib"
#else
#define MY_VIEW @"TableViewIpod.xib"
#endif
然后在我的视图控制器中包含 Define.h
[[NSBundle mainBundle] loadNibNamed:MY_VIEW owner:self options:nil];
我需要使用设备模拟器执行此操作,有没有办法拦截 xcode 中“Active Executable”中的内容并拥有一组专门的定义?还有其他更简单的选择吗?
谢谢
【问题讨论】:
【参考方案1】:您要做的是在运行时选择适合设备的 xib。
你正在做的是一个编译时选择,它将设置xib用于所有设备,这不是你想要的。
我假设您正在构建一个通用应用程序,是吗?
我更喜欢在我的应用程序启动时使用应用程序的 Info.plist 文件中的正确密钥(即密钥 NSMainNibFile~ipad
)让设备加载适当的 xib。 (例如,我将NSMainNibFile~ipad
设置为MainWindow-iPad
...注意:没有“.xib”位)
另一种选择是使用UI_USER_INTERFACE_IDIOM
宏:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
// Load iPad xib
else
// Load iPhone xib
【讨论】:
谢谢,不知道是不是通用的,但目标只是在不改变后面的模型的情况下为 ipad 显示不同的内容。我认为在编译时这样做会更好。否则我将不得不在代码中添加很多“if”语句,或者可能有替代方法。您也可以更详细地了解第一个案例吗?我还是个新手 :-) 对于第一种情况,您根本不需要任何“if”语句。我的“MainWindow-iPad.xib”为应用程序委托(AppDelegate-iPad
)设置了一个特定于 iPad 的类,并包含一个特定于 iPad 的视图控制器(UISplitViewController
)。我只是在我的Info.plist
中设置了NSMainNibFile~ipad
键,然后我就走了。 :)
是的,第一个笔尖没问题,我只是按照你的建议做了。但是,如果一个应用程序有多个 xib,因此有多个控制器,除了为新的 ipad.xib 编写一个新的特定控制器或在现有的控制器中使用“if else”语句之外,我别无他法。以上是关于ipad预编译器的主要内容,如果未能解决你的问题,请参考以下文章