私は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.nibBundleはnilではありません。
AlternativeViewControllerとAlternateViewController_iPad.xibを削除しました。次に、それらを再作成しましたが、「新しいファイルのオプションを選択してください:」ポップアップで、クラスをAlternateViewControllerにリセットし、「サブクラス」をUIViewControllerにリセットし、「iPadを対象」と「ユーザーのXIBを使用」をチェックしました。インターフェース。" これらの新しいファイルのTestAppDelegateを変更してから、アプリケーションを再実行します。不思議なことに、AlternateViewController(iPad)が表示され、変数self.window.rootViewController.nibBundleはnilではありません。
さて、私はここで何が欠けていますか?バグはどこにありますか?それは私のコードですか、それともXcode 4.3ですか?
追加の質問:
TestViewController_iPadが最初に表示され、クリックするとAlternateViewController_iPadが表示されるボタンがある場合、正確にはどうすればよいですか?
更新
私は問題を理解しました。何が起こるかというと、ViewControllerがxibファイルなしで作成されると、メソッドloadViewが新しいViewControllerに追加されます。私の理解では、この方法は、ビューがプログラム的/手動で作成されるときに使用されます。xibファイルまたはストーリーボードを使用する場合は、これを削除する必要があります。私はそれを削除し、すべてが機能します!:)