¿Es posible poner declaraciones si #define?

Estoy tratando de modificar una biblioteca existente para que funcione tanto con iPhone como con iPad. Hay un par de declaraciones que me gustaría modificar:

#define width 320 #define height 50 

Me gustaría hacer algo como:

 if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ #define width X #define height Y } else { #define width A #define height B } 

Sin embargo, parece que no puedo hacer esto. ¿Hay alguna manera de lograr algo como esto? Gracias

Puedes usar #if :

  #if TARGET_DEVICE_IPHONE // note this may be different, don't have acces to Xcode right now. #define width X #define height Y #else #define width A #define height B #endif 

O simplemente haz una simple function en línea:

 static inline int width() { return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ? X : A; } static inline int height() { return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ? Y : B; } 

#define es una definición de preprocesador. Esto significa que esto es lo primero que se hace en la compilation. Básicamente, simplemente pega la definición en todas partes en el código antes de que comience a comstackr.

Pero como sus sentencias if se ejecutan en time de ejecución en lugar de time de compilation, necesitará cambiar sus sentencias if al preprocesador if ( #if , no recomendado), o cambiar su ancho / alto para definirlo en time de ejecución (muy recomendable) . Esto debería verse así:

 int width, height; if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ width = X; height = Y; else { width = A; height = B; } 

y luego, a partir de ese momento, simplemente use los valores de ancho y alto para su ancho y alto.

Si aún desea labelr X, Y, A, B, en lugar de usar #define (constantes de time de compilation), use constantes de time de ejecución:

 static const int iPhoneWidth = X; static const int iPhoneHeight = Y; static const int iPadWidth = A; static const int iPadHeight = B; if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ width = iPhoneWidth; height = iPhoneHeight; else { width = iPadWidth; height = iPadHeight; } 

puedes hacerlo de esta manera,

 #define width (([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) ? A : x) #define height (([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) ? B : Y) 

Qué tal algo como esto:

 #define widthPhone 320 #define widthPad 400 #define heightPhone 50 #define heightPad 90 if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { width = widthPhone; height = heightPhone; } else { width = widthPad; height = heightPad; }