根据设备类型定义常量

时间:2012-08-08 09:57:32

标签: iphone objective-c constants device definition

我有一个Constants.h文件,其实际上包含一些全局常量。由于我的应用程序是为iPhone和iPad构建的,我想为两种设备类型定义相同的常量(即具有相同的名称)。

要获得完整的解释:

/******** pseudo code *********/

if (deviceIsIPad){
    #define kPageMargin 20
}
else {
    #define kPageMargin 10
}

我该怎么做? 感谢。

升。

5 个答案:

答案 0 :(得分:18)

在预处理步骤中无法获得设备类型。它在运行时期间动态确定。您有两种选择:

  1. 创建两个不同的目标(分别用于iPhone和iPad)并在那里定义宏。

  2. 创建插入如下表达式的宏:

  3.  #define IS_IPAD    (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
    
     #define kMyConstant1 (IS_IPAD ? 100 : 200)
     #define kMyConstant2 (IS_IPAD ? 210 : 230)
     #define kMyConstant3 (IS_IPAD ? @"ADASD" : @"XCBX")
    

答案 1 :(得分:2)

#define在编译时解析,即在您的计算机上解析

显然,你不能以你想要的方式使它们成为条件。我建议您创建static变量并在类的+(void)initialise方法上设置它们。

对于这种情况,请使用类似

的内容
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {   
    // iPad 
} else {   
    // iPhone or iPod touch. 
}

那就是

static NSInteger foo;

@implementation bar

+(void)initialise{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {   
        // iPad 
        foo = 42;
    } else {   
        // iPhone or iPod touch. 
        foo = 1337;
    }
}

@end

答案 2 :(得分:0)

您好在appdelegate class

中编写此代码
    +(NSString *)isAppRunningOnIpad:(NSString *)strNib{
    NSString *strTemp;
    NSString *deviceType = [UIDevice currentDevice].model;
    if ([deviceType hasPrefix:@"iPad"]){
        strTemp=[NSString stringWithFormat:@"%@I",strNib];
    }
    else{
        strTemp=strNib;
    }
    return strTemp;
}

使用此行

从您的班级拨打此电话
SecondVC *obj_secondvc = [[SecondVC alloc] initWithNibName:[AppDelegate isAppRunningOnIpad:@"SecondVC"] bundle:nil]; 

答案 3 :(得分:0)

使用UIDevice宏 - http://d3signerd.com/tag/uidevice/

然后你可以编写像;

这样的代码
if ([DEVICE_TYPE isEqualToString:DEVICE_IPAD]) {

}

if (IS_SIMULATOR && IS_RETINA) {

}

答案 4 :(得分:0)

你不能用定义来做这件事,因为它们在编译时被扩展。但是,您可以根据用户界面惯用法定义变量并设置其初始值:

// SomeClass.h
extern CGFloat deviceDependentSize;

// SomeClass.m
- (id)init
{
    // ...
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad])
        deviceDependentSize = 1024.0f; // iPad
    else
        deviceDependentSize = 480.0f; // iPhone


    // etc.
}