0

アプリにiPhone5のサポートを追加する必要があります。現在、appdelegateはUITabBarControllerであるペン先を使用しており、このようなコードを使用しています。正常に動作します。

[window addSubview:rootController.view];
[window makeKeyAndVisible];

rootControllerは、UITabBarControllerのインスタンスです。

そこで、iPhone5用の新しいペン先を作成し、コードを次のように変更しました...

if ([self IsTall])
    rootController = [[[UITabBarController alloc] initWithNibName:@"MainWindow_5" bundle:nil] autorelease];
else
    rootController = [[[UITabBarController alloc] initWithNibName:@"MainWindow" bundle:nil] autorelease];
[window addSubview:rootController.view];
[window makeKeyAndVisible];

ただし、ペン先が読み込まれていないため、このコードでは画面が空白になります。

これを試してみると、正しいペン先が読み込まれて画面に表示されますが、[MORE]ボタンが表示されず、最初の4つのタブのみが表示されます(tabBarControllerには7つのタブがあります)

if ([self IsTall])
    rootController = [[rootController initWithNibName:@"MainWindow_5" bundle:nil] autorelease];
else
    rootController = [[rootController initWithNibName:@"MainWindow" bundle:nil] autorelease];
[window addSubview:rootController.view];
[window makeKeyAndVisible];

私も試しました...

if ([self IsTall])
    [[NSBundle mainBundle] loadNibNamed:@"MainWindow_5" owner:rootController options:nil];
else
    [[NSBundle mainBundle] loadNibNamed:@"MainWindow" owner:rootController options:nil];

ただし、これにより、メインの「nibファイルベース名」設定のplistで宣言されていないnibのタブボタンがクラッシュします。

どんな助けでも大歓迎です。これは私を数日間困惑させました。よろしくロブ。

4

3 に答える 3

0

私のプロジェクトにDefault-568h@2x.pngを追加すると、問題が解決しました。

于 2013-02-25T19:36:12.513 に答える
0

その他の考え:

iPhone5はiOS6です。以前はiOS6でアプリが動作していましたか?そうでない場合は、最初にiOS6で動作させます。iOS 6に対してリンクすると、他に変更が加えられていなくても、アプリが空白になりました。これは、ビューコントローラの動作がまったく異なるためです。したがって、ステップ1は、iOS 6用に簡単な起動動作を実現することです。これは、横向きで起動する場合に特に当てはまります。この点ですべてが完全に変更されます。

自分でサブビューを追加しないでください。ウィンドウを設定するだけrootViewControllerです。それはあなたのためにサブビューを追加します。

全体として、どのような場合でも別のペン先をロードするべきではありません。画面が高いかどうかに関係なく、同じインターフェイスをレイアウトするためにレイアウトを使用する必要があります。

そこに何かが役立つことを願っています...

2番目のコードは完全に違法です。「alloc」と言ったのとまったく同じ行を除いて、決して「init」と言ってはいけません(もちろん、初期化子を除いて)。

于 2013-01-02T22:38:42.993 に答える
0

これが私が使用する方法です

+ (BOOL)isPad{
    BOOL result = NO;
    if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]){
        result = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;
    }
    return result;
}

+ (BOOL) isPhone{
    BOOL result = NO;
    static NSString *model;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        model = [UIDevice currentDevice].model;
    });
    if ([model hasPrefix:@"iPhone"]){
        result = YES;
    }
    return result;
}

+ (BOOL)isWidescreen{
    BOOL result = NO;
    static CGFloat ratio;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        CGSize size = [UIScreen mainScreen].bounds.size;
        CGFloat numerator = MAX(size.height, size.width);
        CGFloat denominator = MIN(size.height, size.width);

        ratio = numerator / denominator;
    });

    if (ratio > 1.77 && ratio < 1.78){
        result = YES;
    }

    return result;
}

次に、到達しやすくするためにステートメントを定義します

#define IS_IPAD() [StaticContainer isPad]
#define IS_WIDESCREEN() [StaticContainer isWidescreen]
#define IS_IPHONE() [StaticContainer isPhone]

UIViewController カテゴリもあります

@implementation UIViewController (initHelpers)

- (id) initClassDevice{
    NSString *device = @"";
    if (IS_IPAD()) {
        device = @"iPad";
    }
    else if (IS_WIDESCREEN()){
        device = @"iPhone5";
    }
    else {
        device = @"iPhone";
    }

    NSString *nibName = [NSString stringWithFormat:@"%@_%@",[self class],device];

    self = [self initWithNibName:nibName bundle:nil];


    return self;

}

@end

異なるアイテムが含まれているそれぞれの nib ファイルが必要です。そして、それらはすべて個別に接続する必要があります。

私は現在、iPhoneとiPadのみを分離しているため、View Controllerの場合は私が持っているでしょう

MyMagicViewController.h/MyMagicViewController.m

そして、私が持っているxibファイルの場合

MyMagicViewController_iPad.xib、MyMagicViewController_iPhone5.xib、および MyMagicViewController_iPhone.xib

重要なことは、xib ファイルの名前を initWithNibName の呼び出しと一致させることです。

また、もう一つ考えること。初期化するビューは、それが入るビューと同じサイズである必要があります。

view.frame = superView.bounds;

そしたらちゃんと収まる

于 2013-01-02T22:36:25.093 に答える