【问题标题】:objective define constants according to device type目标根据设备类型定义常量
【发布时间】:2014-07-28 10:48:06
【问题描述】:

您好,我正在构建一个 Iphone 应用程序,我在其中定义了几个常量。我知道很多人问同样的问题,但我无法弄清楚。所以我的问题是这样的。我在一个文件中定义我的常量值,比如constants.mconstants.h。所以我的constant.h 看起来像:

@interface Constants : NSObject
    //  UI CONSTANTS
    extern int FONT_SIZE_14;
 @end

我的constants.m 看起来像:

@implementation Constants

    //  UI CONSTANTS.

    #if (IS_IPAD)
        int FONT_SIZE_14 = 18;
    #else
        int FONT_SIZE_14 = 14;
    #endif
@end

所以它工作正常,没有任何错误,但它总是只取值 14。如果它在 ipad 上运行,它不会取值 18。我做错了什么。需要一些帮助。谢谢你。

【问题讨论】:

  • 您将什么定义为“IS_IPAD”?
  • 我用 #define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) 尝试过,但它在预处理器条件的 if 条件下给了我错误。

标签: objective-c iphone constants extern


【解决方案1】:

如果您同时支持 ipad 和 iphone,则直到运行时才知道设备。

你可以使用这样的东西:

int myFontSize() {
  switch (UI_USER_INTERFACE_IDIOM()) {
    case UIUserInterfaceIdiomPhone :
      return FONT_SIZE_14;
    case UIUserInterfaceIdiomPad :
      return FONT_SIZE_18;
    default :
  }
}

或者您可以使用定义常量:

#define MY_CONSTANT_Font ( (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? FONT_SIZE_14 : FONT_SIZE_18

【讨论】:

  • 没有理由。我通常这样定义我的实用函数。
  • @samir 谢谢你的帮助。你能告诉我两种方法之间的区别吗?当我尝试使用预处理器方法时,它给了我一个不正确的值。为什么会这样?有什么原因吗?
  • 我用你的第二种方法做了,效果很好。但我无法区分两种方法。有什么区别吗?
猜你喜欢
  • 2012-08-05
  • 2013-05-22
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多