6

実際、いくつかのグローバル定数を含む Constants.h ファイルがあります。私のアプリケーションは iPhone と iPad の両方用に作成されているため、同じ定数 (つまり、同じ名前) を 2 つのデバイス タイプに対して別々に定義したいと考えています。

完全な説明については、次のとおりです。

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

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

これどうやってするの?ありがとう。

L.

4

5 に答える 5

18

前処理ステップ中にデバイス タイプを取得することはできません。実行時に動的に決定されます。次の 2 つのオプションがあります。

  1. 2 つの異なるターゲット (それぞれ iPhone と iPad 用) を作成し、そこにマクロを定義します。

  2. 次のような式を挿入するマクロを作成します。

 #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")
于 2012-08-08T10:03:26.073 に答える
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
于 2012-08-08T10:01:15.310 に答える
0

UIDeviceマクロを使用する-http ://d3signerd.com/tag/uidevice/

次に、次のようなコードを記述できます。

if ([DEVICE_TYPE isEqualToString:DEVICE_IPAD]) {

}

また

if (IS_SIMULATOR && IS_RETINA) {

}
于 2012-08-08T10:04:38.940 に答える
0

こんにちは、appdelegateクラスでこのコードを書きます

    +(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]; 
于 2012-08-08T10:00:19.933 に答える
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.
}
于 2012-08-08T10:09:50.870 に答える