如何使用定义宏iOS

Mat*_*der 4 ios

我需要进行定义,但如果我使用iPad或iPhone,我需要在这种情况下使用不同的值.

所以,我认为它应该是这样的:

#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif
Run Code Online (Sandbox Code Playgroud)

有一些解决方案可以得到它吗?

Mik*_*ock 7

UI_USER_INTERFACE_IDIOM是一个宏,它扩展为某个表达式,用于在运行时检查硬件类型,而不是在编译时.因此,您可能希望将您的定义更改ROWCOUNT为变量而不是const或宏.

NSUInteger rowCount;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    rowCount = 12;
else
    rowCount = 5;
Run Code Online (Sandbox Code Playgroud)

或者更简洁:

NSUInteger rowCount = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 12 : 5;
Run Code Online (Sandbox Code Playgroud)


Chr*_*ler 7

#ifdef 在这里没有真正做你想做的事.

一个好的解决方案是:

#define ROWCOUNT ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 5 : 12)
Run Code Online (Sandbox Code Playgroud)

  • 建议进行小修改 - 确保将整个表达式括在()中.否则,if(ROWCOUNT == 5)之类的语句将被错误地解释. (2认同)

Bro*_*son 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)
Run Code Online (Sandbox Code Playgroud)

您也可以使用IS_IPAD宏,如下所示:

NSUInteger rowCount;
if (IS_IPAD){
    rowCount = 12;
}else{
    rowCount = 5;
}
Run Code Online (Sandbox Code Playgroud)