3

他のiPhone開発者が使用するiPhoneSDKを構築しています。

このSDKの主な用途は、ユーザーが特定のプロセスを完了できるようにするUIを提示することです。

このUIは、プロセスを形成する複数のUIViewControllerで構成されているため、UINavigationController内にラップする必要があります。

SDKを使用する開発者が、カスタムUINavigationControllerを初期化してから、必要に応じて提示してほしいと思います。

カスタムナビゲーションコントローラーのrootViewControllerがSDKの特定のViewControllerになるように強制したいので、開発者は別のrootViewControllerで初期化することはできません。

これを達成するための推奨される方法は何ですか?

4

3 に答える 3

2

UINavigationControllerAppleのドキュメントに書かれているようにサブクラス化しないでください。

このクラスはサブクラス化を目的としていません。代わりに、アプリケーションのユーザーインターフェイスにコンテンツの階層的な性質を反映させたい状況では、そのインスタンスをそのまま使用します。

iOS 5の場合は、UIViewControllersの新しい包含APIを使用します。

ContainerViewControllerの実装

このアプローチを使用すると、ルートコントローラーを強制して、ユーザーに非表示のままにすることができます。

iOS 5が利用できない場合は、以前の回答を参照してください。アプリケーション内でさまざまなビューコントローラーを処理します:カスタムコンテンツビューコントローラーを作成します

お役に立てば幸いです。

于 2012-06-28T07:30:58.923 に答える
1

ビューコントローラをインスタンス化するクラスメソッドを作成できます。

+(MyViewController*)myViewController {
    MyViewController* = myViewController = [[MyViewController* alloc] init];
    myViewController.rootViewController = [[MyDesiredRootViewController alloc] init];
    return myViewController;
}

開発者は、このメソッドを使用してView Controllerを初期化し、すべての初期化作業を開発者から隠します。

于 2012-06-28T11:32:52.950 に答える
0

rootViewControllerが別のクラスの場合、初期化に失敗する可能性があります

- (id)initWithRootViewController:(UIViewController*)rootController
{
    if(![rootController isKindOfClass:[YourRootViewController class]])
        return nil;

    //Do default init stuff

}
于 2012-06-28T07:23:46.713 に答える