0

私はiOS開発のUI部分に不慣れです。ユニバーサルiOSアプリを作成しようとしています。Xcode 4.3では、シングルビューアプリケーションテンプレートとユニバーサルデバイスファミリを使用してプロジェクトを作成すると、AppDelegate、ViewController、ViewController_iPhone.xib、およびViewController_iPad.xibのファイルが作成されます。以前のバージョンのXcodeでは、AppDelegateの2つのサブクラスも作成されているため、これらは混乱します。1つはiPhone用、もう1つはiPad用です。とにかく、たとえば、TestAppDelegate、TestViewController、TestViewController_iPhone.xib、およびTestViewController_iPad.xibがあります。iPadシミュレーターでアプリを実行すると、TestViewController_iPad.xibが表示されます。

次に、AlternateViewControllerを追加しました。その後、AlternateViewController_iPad.xibを作成しました。このxibファイルを選択し、ファイルの所有者カスタムクラスをAlternateViewControllerに設定し、アウトレットビューを[オブジェクト]の下の[ビュー]に設定しました。AlternativeViewController_iPadを表示できるかどうかを確認したかったので、TestAppDelegateで次のようにしました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if(NO){
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPhone" bundle:nil] autorelease];
        } else {
            self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPad" bundle:nil] autorelease];
        }
        self.window.rootViewController = self.viewController;
    }
    else{
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPhone" bundle:nil] autorelease];
        } else {
            self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPad" bundle:nil] autorelease];
        }
        self.window.rootViewController = self.alternateScreenController;
    }

    [self.window makeKeyAndVisible];
    return YES;
}

コードを実行しましたが、残念ながら、AlternateViewController_iPad.xibが表示されません。



「returnYES;」にブレークポイントを設定しました。一部であり、デバッグ領域で、変数self.window.rootViewController.nibBundleがnilに設定されていることがわかります。ただし、TestViewController_iPadが使用されている場合、変数self.window.rootViewController.nibBundlenilではありません



AlternativeViewControllerとAlternateViewController_iPad.xibを削除しました。次に、それらを再作成しましたが、「新しいファイルのオプションを選択してください:」ポップアップで、クラスをAlternateViewControllerにリセットし、「サブクラス」をUIViewControllerにリセットし、「iPadを対象」と「ユーザーのXIBを使用」をチェックしました。インターフェース。" これらの新しいファイルのTestAppDelegateを変更してから、アプリケーションを再実行します。不思議なことに、AlternateViewController(iPad)が表示され、変数self.window.rootViewController.nibBundlenilではありません



さて、私はここで何が欠けていますか?バグはどこにありますか?それは私のコードですか、それともXcode 4.3ですか?



追加の質問:
TestViewController_iPadが最初に表示され、クリックするとAlternateViewController_iPadが表示されるボタンがある場合、正確にはどうすればよいですか?


更新 私は問題を理解しました。何が起こるかというと、ViewControllerがxibファイルなしで作成されると、メソッドloadViewが新しいViewControllerに追加されます。私の理解では、この方法は、ビューがプログラム的/手動で作成されるときに使用されます。xibファイルまたはストーリーボードを使用する場合は、これを削除する必要があります。私はそれを削除し、すべてが機能します!:)

4

1 に答える 1

0

私は問題を理解しました。何が起こるかというと、ViewControllerがxibファイルなしで作成されると、メソッドloadViewが新しいViewControllerに追加されます。私の理解では、この方法は、ビューがプログラム的/手動で作成されるときに使用されます。xibファイルまたはストーリーボードを使用する場合は、これを削除する必要があります。私はそれを削除し、すべてが機能します!:)

于 2012-08-17T11:03:29.387 に答える