ビューコントローラーの読み込み& Cocoa Touchでxibを使用せずにプログラムで階層を表示する
-
03-07-2019 - |
質問
すべてのCocoa Touchテンプレートがペン先をロードするように設定されているようです。
View Controllerを使用する新しいプロジェクトを開始し、nib / xibからではなく、そのビュー(階層)をプログラムで読み込む場合、テンプレートの設定または調整の手順はどのようになりますか。
-loadViewを実装するだけでしたが、これを実行しようとするたびに問題が発生します。
解決
完全にプログラムによるユーザーインターフェイスの生成は、かなり簡単です。まず、main.mを次のように編集する必要があります。
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
UIApplicationMain(argc, argv, nil, @"MyAppDelegate");
[pool release];
return 0;
}
MyAppDelegateは、アプリケーションデリゲートクラスの名前です。これは、起動時にMyAppDelegateのインスタンスが作成されることを意味します。これは通常、アプリケーションのメインNibファイルによって処理されます。
MyAppDelegate内で、次のようなapplicationDidFinishLaunching:メソッドを実装します。
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if (!window)
{
[self release];
return;
}
window.backgroundColor = [UIColor whiteColor];
rootController = [[MyRootViewController alloc] init];
[window addSubview:rootController.view];
[window makeKeyAndVisible];
[window layoutSubviews];
}
MyRootViewControllerは、ウィンドウのプライマリビューのビューコントローラーです。これにより、メインウィンドウが初期化され、MyRootViewControllerによって管理されるビューが追加されます。 rootControllerは、後で参照できるように、デリゲート内のインスタンス変数として保持されます。
これにより、MyRootViewControllerを介してプログラムでユーザーインターフェイスを生成できるようになります。
他のヒント
UIView自体には階層がありませんが、UINavigationControllerにはあります。そのため、それらの1つを初期化し、UIViewControllerをそのスタックにポップします。これは、可能な限り最も基本的な方法で、XIBファイルをまったく使用せずに行う必要があります。これに基づいて構築できるはずです。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
UINavigationController *navController = [[UINavigationController alloc] init];
UIViewController *viewController = [[UIViewController alloc] init];
// set the properties of viewController here, to make it look like you want
[navController pushViewController:viewController animated:NO];
[window addSubview:navController.view];
// Don't forget memory management
[navController release];
[viewController release];
[window makeKeyAndVisible];
}