我需要做一個定義,但如果我使用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