2013-08-06 48 views
4

我需要做一個定義,但如果我使用iPad或iPhone,在這種情況下我需要不同的值。如何使用define宏iOS

所以,我想應該是這樣的:

#ifdef UI_USER_INTERFACE_IDIOM == iPAD 
#define ROWCOUNT 12 
#else 
#define ROWCOUNT 5 
#endif 

有一些解決辦法得到它?

+0

使用可變的rowCount而不是 – AlexWien

+0

請參閱http://stackoverflow.com/questions/2576356/how-doe s-one-get-ui-user-interface-idiom-to-work-with-iphone-os-sdk-3-2 – usr2564301

回答

7

#ifdef並沒有真正做你想要的這裏。

一個很好的解決辦法是:

#define ROWCOUNT ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 5 : 12) 
+2

小修改建議 - 確保將整個表達式放在()中。否則,像if(ROWCOUNT == 5)這樣的語句將被錯誤地解釋。 – sbaker

+1

你是完全正確的。改變。^_^ –

+0

是的,我剛剛看到警告並立即添加()。 Xcode非常聰明) –

7

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; 
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; 
}