我需要做一个定义,但如果我使用iPad或iPhone,在这种情况下我需要不同的值。如何使用define宏iOS
所以,我想应该是这样的:
#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif
有一些解决办法得到它?
我需要做一个定义,但如果我使用iPad或iPhone,在这种情况下我需要不同的值。如何使用define宏iOS
所以,我想应该是这样的:
#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif
有一些解决办法得到它?
#ifdef
并没有真正做你想要的这里。
一个很好的解决办法是:
#define ROWCOUNT ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 5 : 12)
小修改建议 - 确保将整个表达式放在()中。否则,像if(ROWCOUNT == 5)这样的语句将被错误地解释。 – sbaker
你是完全正确的。改变。^_^ –
是的,我刚刚看到警告并立即添加()。 Xcode非常聪明) –
UI_USER_INTERFACE_IDIOM
为展开至一些表达,在编译时在运行时检查硬件的类型,而不是一个宏。因此,您想要将您的ROWCOUNT
的定义更改为变量而不是常量或宏。
NSUInteger rowCount;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
rowCount = 12;
else
rowCount = 5;
或更简洁:
NSUInteger rowCount = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 12 : 5;
这种方法正确识别UI_USER_INTERFACE_IDIOM的可用性:
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD false
#endif
#define ROWCOUNT (IS_IPAD ? 12: 5)
您也可以使用IS_IPAD宏如下:
NSUInteger rowCount;
if (IS_IPAD){
rowCount = 12;
}else{
rowCount = 5;
}
使用可变的rowCount而不是 – AlexWien
请参阅http://stackoverflow.com/questions/2576356/how-doe s-one-get-ui-user-interface-idiom-to-work-with-iphone-os-sdk-3-2 – usr2564301